⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_if.c

📁 8032底层驱动部分。因为可以移植 所以单独来拿出来
💻 C
📖 第 1 页 / 共 5 页
字号:
                  
      #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 + -