📄 lcd_if.c
字号:
#endif
break;
#endif /* DUAL_LCD */
default:
ASSERT(0);
break;
}
lcd_power_down();
} /* lcd_sleep_in() */
/*************************************************************************
* FUNCTION
* lcd_sleep_out
*
* DESCRIPTION
* This function is used to let LCD module leave sleep mode
*
* PARAMETERS
* lcd_id : selection MAIN_LCD or SUB_LCD
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void lcd_sleep_out(kal_uint8 lcd_id)
{
kal_uint32 save_irq_mask;
lcd_power_up();
switch (lcd_id)
{
case MAIN_LCD:
#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
DRV_WriteReg32(LCD_ROI_CMD_ADDR_REG,MAIN_LCD_CMD_ADDR);
DRV_WriteReg32(LCD_ROI_DATA_ADDR_REG,MAIN_LCD_DATA_ADDR);
#endif /* MT6218B, MT6219 */
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
if((main_lcd_operation_state==LCD_DC_UPDATE_SLEEP_STATE)||
(main_lcd_operation_state==LCD_HW_UPDATE_SLEEP_STATE))
{
save_irq_mask=SaveAndSetIRQMask();
lcd_sleeping_state=KAL_TRUE;
RestoreIRQMask(save_irq_mask);
while (IMGDMA_IBW2_IS_BUSY) {};
IRQMask(IRQ_LCD_CODE);
LCD_WRITE_MEM_AND_LCM;
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
lcd_hw_trigger_roi_ctrl |= LCD_ROI_CTRL_CMD_ENABLE_BIT;
save_lcd_register();
REG_LCD_ROI_HW_CTRL = 0;
MainLCD->SleepOut();
restore_lcd_register();
IRQUnmask(IRQ_LCD_CODE);
save_irq_mask=SaveAndSetIRQMask();
lcd_sleeping_state=KAL_FALSE;
RestoreIRQMask(save_irq_mask);
main_lcd_hw_trigger_output_mode=KAL_TRUE;
if (main_lcd_operation_state==LCD_DC_UPDATE_SLEEP_STATE)
main_lcd_operation_state=LCD_DC_UPDATE_STATE;
else if (main_lcd_operation_state==LCD_HW_UPDATE_SLEEP_STATE)
main_lcd_operation_state=LCD_HW_UPDATE_STATE;
}
else
{
MainLCD->SleepOut();
main_lcd_operation_state=LCD_STANDBY_STATE;
}
#else
MainLCD->SleepOut();
main_lcd_operation_state=LCD_STANDBY_STATE;
#endif
break;
#ifdef DUAL_LCD
case SUB_LCD:
#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
DRV_WriteReg32(LCD_ROI_CMD_ADDR_REG,SUB_LCD_CMD_ADDR);
DRV_WriteReg32(LCD_ROI_DATA_ADDR_REG,SUB_LCD_DATA_ADDR);
#endif /* MT6218B, MT6219 */
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
if((sub_lcd_operation_state==LCD_DC_UPDATE_SLEEP_STATE)||
(sub_lcd_operation_state==LCD_HW_UPDATE_SLEEP_STATE))
{
save_irq_mask=SaveAndSetIRQMask();
lcd_sleeping_state=KAL_TRUE;
RestoreIRQMask(save_irq_mask);
while (IMGDMA_IBW2_IS_BUSY) {};
LCD_WRITE_MEM_AND_LCM;
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
lcd_hw_trigger_roi_ctrl |= LCD_ROI_CTRL_CMD_ENABLE_BIT;
save_lcd_register();
REG_LCD_ROI_HW_CTRL = 0;
SubLCD->SleepOut();
restore_lcd_register();
save_irq_mask=SaveAndSetIRQMask();
lcd_sleeping_state=KAL_FALSE;
RestoreIRQMask(save_irq_mask);
sub_lcd_hw_trigger_output_mode=KAL_TRUE;
if (sub_lcd_operation_state==LCD_DC_UPDATE_SLEEP_STATE)
sub_lcd_operation_state=LCD_DC_UPDATE_STATE;
else if (sub_lcd_operation_state==LCD_HW_UPDATE_SLEEP_STATE)
sub_lcd_operation_state=LCD_HW_UPDATE_STATE;
}
else
{
SubLCD->SleepOut();
sub_lcd_operation_state=LCD_STANDBY_STATE;
}
#else
SubLCD->SleepOut();
sub_lcd_operation_state=LCD_STANDBY_STATE;
#endif
break;
#endif /* DUAL_LCD */
default:
ASSERT(0);
break;
}
lcd_power_down();
} /* lcd_sleep_out() */
/*************************************************************************
* FUNCTION
* get_lcd_frame_buffer_address
*
* DESCRIPTION
* This function is to layer buffer address
*
* PARAMETERS
* none
*
* RETURNS
* buffer address
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 get_lcd_frame_buffer_address(void)
{
#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
switch (REG_LCD_ROI_CTRL&LCD_LAYER_MASK)
{
case LCD_LAYER0_ENABLE:
lcd_frame_buffer_address=REG_LCD_LAYER0_BUFF_ADDR;
break;
case LCD_LAYER1_ENABLE:
lcd_frame_buffer_address=REG_LCD_LAYER1_BUFF_ADDR;
break;
case LCD_LAYER2_ENABLE:
lcd_frame_buffer_address=REG_LCD_LAYER2_BUFF_ADDR;
break;
case LCD_LAYER3_ENABLE:
lcd_frame_buffer_address=REG_LCD_LAYER3_BUFF_ADDR;
break;
#if defined(MT6228)||defined(MT6229)||defined(MT6230)
case LCD_LAYER4_ENABLE:
lcd_frame_buffer_address=REG_LCD_LAYER4_BUFF_ADDR;
break;
case LCD_LAYER5_ENABLE:
lcd_frame_buffer_address=REG_LCD_LAYER5_BUFF_ADDR;
break;
#endif
}
#endif /* MT6217, MT6218B, MT6219 */
return lcd_frame_buffer_address;
} /* get_lcd_frame_buffer_address */
/*************************************************************************
* FUNCTION
* set_lcd_dc_layer_format
*
* DESCRIPTION
* This function is to set hw update layer format
*
* PARAMETERS
* hw_update_layer: hw update layere
* direct_couple: direct couple or not
*
* RETURNS
* none
*
* GLOBALS AFFECTED
*
*************************************************************************/
void set_lcd_dc_layer_format(kal_uint32 hw_update_layer,kal_bool direct_couple)
{
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
if (direct_couple==KAL_TRUE)
{
switch (hw_update_layer)
{
case LCD_LAYER0_ENABLE:
lcd_dc_color_mode=GET_LCD_LAYER0_COLOR_MODE;
SET_LCD_LAYER0_ARGB8888_MODE;
break;
case LCD_LAYER1_ENABLE:
lcd_dc_color_mode=GET_LCD_LAYER1_COLOR_MODE;
SET_LCD_LAYER1_ARGB8888_MODE;
break;
case LCD_LAYER2_ENABLE:
lcd_dc_color_mode=GET_LCD_LAYER2_COLOR_MODE;
SET_LCD_LAYER2_ARGB8888_MODE;
break;
case LCD_LAYER3_ENABLE:
lcd_dc_color_mode=GET_LCD_LAYER3_COLOR_MODE;
SET_LCD_LAYER3_ARGB8888_MODE;
break;
case LCD_LAYER4_ENABLE:
lcd_dc_color_mode=GET_LCD_LAYER4_COLOR_MODE;
SET_LCD_LAYER4_ARGB8888_MODE;
break;
case LCD_LAYER5_ENABLE:
lcd_dc_color_mode=GET_LCD_LAYER5_COLOR_MODE;
SET_LCD_LAYER5_ARGB8888_MODE;
break;
}
}
else
{
switch (hw_update_layer)
{
case LCD_LAYER0_ENABLE:
switch (lcd_dc_color_mode)
{
case LCD_LAYER_SOURCE_COLOR_8BPP_INDEX:
SET_LCD_LAYER0_8BPP_INDEX_MODE
break;
case LCD_LAYER_SOURCE_COLOR_RGB565:
SET_LCD_LAYER0_RGB565_MODE;
break;
case LCD_LAYER_SOURCE_COLOR_RGB888:
SET_LCD_LAYER0_RGB888_MODE
break;
}
break;
case LCD_LAYER1_ENABLE:
switch (lcd_dc_color_mode)
{
case LCD_LAYER_SOURCE_COLOR_8BPP_INDEX:
SET_LCD_LAYER1_8BPP_INDEX_MODE
break;
case LCD_LAYER_SOURCE_COLOR_RGB565:
SET_LCD_LAYER1_RGB565_MODE;
break;
case LCD_LAYER_SOURCE_COLOR_RGB888:
SET_LCD_LAYER1_RGB888_MODE
break;
}
break;
case LCD_LAYER2_ENABLE:
switch (lcd_dc_color_mode)
{
case LCD_LAYER_SOURCE_COLOR_8BPP_INDEX:
SET_LCD_LAYER2_8BPP_INDEX_MODE
break;
case LCD_LAYER_SOURCE_COLOR_RGB565:
SET_LCD_LAYER2_RGB565_MODE;
break;
case LCD_LAYER_SOURCE_COLOR_RGB888:
SET_LCD_LAYER2_RGB888_MODE
break;
}
break;
case LCD_LAYER3_ENABLE:
switch (lcd_dc_color_mode)
{
case LCD_LAYER_SOURCE_COLOR_8BPP_INDEX:
SET_LCD_LAYER3_8BPP_INDEX_MODE
break;
case LCD_LAYER_SOURCE_COLOR_RGB565:
SET_LCD_LAYER3_RGB565_MODE;
break;
case LCD_LAYER_SOURCE_COLOR_RGB888:
SET_LCD_LAYER3_RGB888_MODE
break;
}
break;
case LCD_LAYER4_ENABLE:
switch (lcd_dc_color_mode)
{
case LCD_LAYER_SOURCE_COLOR_8BPP_INDEX:
SET_LCD_LAYER4_8BPP_INDEX_MODE
break;
case LCD_LAYER_SOURCE_COLOR_RGB565:
SET_LCD_LAYER4_RGB565_MODE;
break;
case LCD_LAYER_SOURCE_COLOR_RGB888:
SET_LCD_LAYER4_RGB888_MODE
break;
}
break;
case LCD_LAYER5_ENABLE:
switch (lcd_dc_color_mode)
{
case LCD_LAYER_SOURCE_COLOR_8BPP_INDEX:
SET_LCD_LAYER5_8BPP_INDEX_MODE
break;
case LCD_LAYER_SOURCE_COLOR_RGB565:
SET_LCD_LAYER5_RGB565_MODE;
break;
case LCD_LAYER_SOURCE_COLOR_RGB888:
SET_LCD_LAYER5_RGB888_MODE
break;
}
break;
}
}
#endif
} /* set_lcd_dc_layer_format() */
/*************************************************************************
* FUNCTION
* reset_lcd_if
*
* DESCRIPTION
* This function is to disable hw trigger and write to memory
*
* PARAMETERS
* none
*
* RETURNS
* none
*
* GLOBALS AFFECTED
*
*************************************************************************/
void reset_lcd_if(void)
{
#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
lcd_power_up();
while (LCD_IS_RUNNING)
{};
DISABLE_LCD_ROI_CTRL_W2MEM;
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
DISABLE_LCD_HW_TRIGGER_UPDATE;
#endif
#endif /* MT6217, MT6218B, MT6219 */
} /* reset_lcd_if() */
/*************************************************************************
* FUNCTION
* lcd_dma_slow_down
*
* DESCRIPTION
* This function will change the lcd DMA transfer rate to slowest rate
*
* PARAMETERS
*
* RETURNS
* none
*
* GLOBALS AFFECTED
*
*************************************************************************/
void lcd_dma_slow_down(kal_uint8 level)
{
#if (defined(MT6217)||defined(MT6218B))
kal_uint32 save_irq_mask;
kal_bool internal_ram=KAL_TRUE;
if ((lcd_update_internal_ram==KAL_FALSE)||(internal_ram==KAL_FALSE))
{
save_irq_mask=SaveAndSetIRQMask();
if (DRV_Reg(DRVPDN_CON1)&DRVPDN_CON1_LCD)
{ /* lcd power off */
lcd_power_up();
switch (level)
{
case 4:
SET_LCD_ROI_CTRL_CMD_LATENCY(0x3F);
break;
case 3:
SET_LCD_ROI_CTRL_CMD_LATENCY(0x2F);
break;
case 2:
SET_LCD_ROI_CTRL_CMD_LATENCY(0x1F);
break;
case 1:
SET_LCD_ROI_CTRL_CMD_LATENCY(0x18);
break;
case 0:
SET_LCD_ROI_CTRL_CMD_LATENCY(0x10);
break;
}
lcd_power_down();
}
else
{ /* lcd power on */
switch (level)
{
case 4:
SET_LCD_ROI_CTRL_CMD_LATENCY(0x3F);
break;
case 3:
SET_LCD_ROI_CTRL_CMD_LATENCY(0x2F);
break;
case 2:
SET_LCD_ROI_CTRL_CMD_LATENCY(0x1F);
break;
case 1:
SET_LCD_ROI_CTRL_CMD_LATENCY(0x18);
break;
case 0:
SET_LCD_ROI_CTRL_CMD_LATENCY(0x10);
break;
}
}
RestoreIRQMask(save_irq_mask);
}
#elif (defined(MT6205B)||defined(MT6218))
if (DRV_Reg(DRVPDN_CON1)&DRVPDN_CON1_LCD)
{ /* lcd power off */
lcd_power_up();
DRV_WriteReg(LCD_REFR,0x0fff); /*LCD DMA*/
lcd_power_down();
}
else
{ /* lcd power on */
DRV_WriteReg(LCD_REFR,0x0fff); /*LCD DMA*/
}
#endif
} /* lcd_dma_slow_down() */
/*************************************************************************
* FUNCTION
* lcd_dma_recovery
*
* DESCRIPTION
* This function will change the lcd DMA transfer rate to normal rate
*
* PARAMETERS
*
* RETURNS
* none
*
* GLOBALS AFFECTED
*
*************************************************************************/
void lcd_dma_recovery(void)
{
#if (defined(MT6217)||defined(MT6218B))
kal_ui
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -