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

📄 lcd_if.c

📁 Lcd interface between upper application layer and driver (MTK)
💻 C
📖 第 1 页 / 共 5 页
字号:
			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))
		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
}

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))
	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))
			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() */

void resume_lcd_layer_rotate(void)
{
#if (defined(MT6217)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229))
	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))
		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
*
* DESCRIPTION
*     This function is to configure the layer parameters in the layer parameter queue
*     for LCD multi-layer structure.
*
* CALLS
*
* PARAMETERS
*	None
*
* RETURNS
*
*
* GLOBALS AFFECTED
*   lcd_layer_data[].layer_update_queue will be set as KAL_FALSE
**************************************************************************/
void config_lcd_layer_window_queue(void)
{
#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229))
	kal_uint8 i;
   kal_uint32 lcd_layer_base_addr=LCD_LAYER0_BASE_ADDR;
   kal_uint32 lcd_layer_ctrl_reg;

	lcd_power_up();
	for (i=0;i<LCD_TOTAL_LAYER;i++)
	{
		if (lcd_layer_data[i].layer_update_queue==KAL_TRUE)
		{
		   lcd_layer_base_addr+=i*LCD_LAYER_ADDR_OFFSET;
	#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
		   lcd_layer_ctrl_reg=((lcd_layer_data[i].source_key&0xFFFF)<< 16);
		   lcd_layer_ctrl_reg |= ((lcd_layer_data[i].opacity_value)<<3);
		   if (lcd_layer_data[i].color_palette_enable)
      		lcd_layer_ctrl_reg |= LCD_LAYER_CTRL_LUT_ENABLE_BIT;
	#elif (defined(MT6228)||defined(MT6229))
		   lcd_layer_ctrl_reg = (lcd_layer_data[i].opacity_value);
	#endif
	#if (!defined(MT6218B))
			lcd_layer_ctrl_reg |= (lcd_layer_data[i].rotate_value<<11);
	#endif

	#if (defined(MT6217)||defined(MT6218B)||defined(MT6219))
		   if (lcd_layer_data[i].color_palette_select)
      		lcd_layer_ctrl_reg |= LCD_LAYER_CTRL_LUT1_SELECT_BIT;
	#endif
		   if (lcd_layer_data[i].source_key_enable)
      		lcd_layer_ctrl_reg |= LCD_LAYER_CTRL_SOURCE_KEY_ENABLE_BIT;

		   if (lcd_layer_data[i].opacity_enable)
      		lcd_layer_ctrl_reg |= LCD_LAYER_CTRL_OPACITY_ENABLE_BIT;

	#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
		   DRV_WriteReg32(lcd_layer_base_addr+0x04,(lcd_layer_data[i].x_offset)|(lcd_layer_data[i].y_offset<<16));
		   DRV_WriteReg32(lcd_layer_base_addr+0x08,lcd_layer_data[i].frame_buffer_address);
   		DRV_WriteReg32(lcd_layer_base_addr+0x0C,(lcd_layer_data[i].column_number)|(lcd_layer_data[i].row_number<<16));
	#elif (defined(MT6228)||defined(MT6229))
			lcd_layer_ctrl_reg |= (lcd_layer_data[i].source_color_format << 9);

			DRV_WriteReg32(lcd_layer_base_addr+0x04,(lcd_layer_data[i].source_key));
		   DRV_WriteReg32(lcd_layer_base_addr+0x08,(lcd_layer_data[i].x_offset)|(lcd_layer_data[i].y_offset<<16));
		   DRV_WriteReg32(lcd_layer_base_addr+0xC,lcd_layer_data[i].frame_buffer_address);
   		DRV_WriteReg32(lcd_layer_base_addr+0x10,(lcd_layer_data[i].column_number)|(lcd_layer_data[i].row_number<<16));
	#endif
		   DRV_WriteReg32(lcd_layer_base_addr,lcd_layer_ctrl_reg);
   		lcd_layer_data[i].layer_update_queue=KAL_FALSE;
		}
	}
	lcd_power_down();
#endif
}	/* config_lcd_layer_window_queue() */

/*************************************************************************
* FUNCTION
*  config_lcd_layer_window
*
* DESCRIPTION
*     This function is to configure the layer parameters for LCD multi-layer structure.
*
* CALLS
*
* PARAMETERS
*  lcd_layer   : configured layer (from LCD_LAYER0 to LCD_LAYER3)
*  layer_data  : the parameters for lcd_layer
*
* RETURNS
*  return KAL_TRUE if configure successful
*
* GLOBALS AFFECTED
*   none
**************************************************************************/
kal_bool config_lcd_layer_window(kal_uint8 lcd_layer,lcd_layer_struct *layer_data)
{  /* LCM independent */
#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229))
   kal_uint32 lcd_layer_base_addr=LCD_LAYER0_BASE_ADDR;
   kal_uint32 lcd_layer_ctrl_reg;

   if (lcd_layer>=LCD_TOTAL_LAYER)
      ASSERT(0);

	if (layer_data->opacity_enable)
	{
		if (layer_data->opacity_value>LCD_MAX_OPACITY)
			ASSERT(0);
	}
	#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
	if (layer_data->color_palette_enable)
	{
		#if (defined(MT6226)||defined(MT6226M)||defined(MT6227))
		if (layer_data->color_palette_select>LCD_COLOR_PALETTE0)
			 ASSERT(0);
		#else
		if (layer_data->color_palette_select>LCD_COLOR_PALETTE1)
			 ASSERT(0);
		#endif
	}
	#endif	/* for MT6226,MT6227, MT6228 and MT6229, only support one color palette */

	#if (defined(MT6217)||defined(MT6218B))
   if (LCD_IS_RUNNING)
   {
   	IRQMask(IRQ_LCD_CODE);
      lcd_layer_data[lcd_layer].layer_update_queue=KAL_TRUE;
      lcd_layer_data[lcd_layer].source_key_enable=layer_data->source_key_enable;
      lcd_layer_data[lcd_layer].color_palette_enable=layer_data->color_palette_enable;
      lcd_layer_data[lcd_layer].opacity_enable=layer_data->opacity_enable;
      lcd_layer_data[lcd_layer].color_palette_select=layer_data->color_palette_select;
      lcd_layer_data[lcd_layer].opacity_value=layer_data->opacity_value;
      lcd_layer_data[lcd_layer].rotate_value=layer_data->rotate_value;
      lcd_layer_data[lcd_layer].source_key=layer_data->source_key;
      lcd_layer_data[lcd_layer].x_offset=layer_data->x_offset;
      lcd_layer_data[lcd_layer].y_offset=layer_data->y_offset;
      lcd_layer_data[lcd_layer].row_number=layer_data->row_number;
      lcd_layer_data[lcd_layer].column_number=layer_data->column_number;
      lcd_layer_data[lcd_layer].frame_buffer_address=layer_data->frame_buffer_address;
      IRQUnmask(IRQ_LCD_CODE);
      return KAL_TRUE;
   }
	#elif (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
   #ifndef DUAL_LCD
      if ((main_lcd_operation_state!=LCD_STANDBY_STATE)&&
      	 (main_lcd_operation_state!=LCD_SW_UPDATE_STATE)&&
          (main_lcd_operation_state!=LCD_HW_UPDATE_STATE)&&
          (main_lcd_operation_state!=LCD_DC_UPDATE_STATE)&&
          (main_lcd_operation_state!=LCD_SLEEP_STATE))
         ASSERT(0);
   #else
      if (current_update_lcd==MAIN_LCD)
      {
         if ((main_lcd_operation_state!=LCD_STANDBY_STATE)&&
         	 (main_lcd_operation_state!=LCD_SW_UPDATE_STATE)&&
             (main_lcd_operation_state!=LCD_HW_UPDATE_STATE)&&
             (main_lcd_operation_state!=LCD_DC_UPDATE_STATE)&&
          	 (main_lcd_operation_state!=LCD_SLEEP_STATE))
            ASSERT(0);
      }
      else
      {
         if ((sub_lcd_operation_state!=LCD_STANDBY_STATE)&&
         	 (sub_lcd_operation_state!=LCD_SW_UPDATE_STATE)&&
             (sub_lcd_operation_state!=LCD_HW_UPDATE_STATE)&&
             (sub_lcd_operation_state!=LCD_DC_UPDATE_STATE)&&
          	 (sub_lcd_operation_state!=LCD_SLEEP_STATE))
            ASSERT(0);
      }
   #endif /* DUAL_LCD */
   #elif (defined(MT6228)||defined(MT6229))
   #ifndef DUAL_LCD
      if ((main_lcd_operation_state!=LCD_STANDBY_STATE)&&
      	 (main_lcd_operation_state!=LCD_SW_UPDATE_STATE)&&
          (main_lcd_operation_state!=LCD_HW_UPDATE_STATE)&&
          (main_lcd_operation_state!=LCD_DC_UPDATE_STATE)&&
          (main_lcd_operation_state!=LCD_SLEEP_STATE)&&
          (main_lcd_operation_state!=LCD_DC_UPDATE_SLEEP_STATE)&&
          (main_lcd_operation_state!=LCD_HW_UPDATE_SLEEP_STATE))
         ASSERT(0);
   #else
      if (current_update_lcd==MAIN_LCD)
      {
         if ((main_lcd_operation_state!=LCD_STANDBY_STATE)&&
         	 (main_lcd_operation_state!=LCD_SW_UPDATE_STATE)&&
             (main_lcd_operation_state!=LCD_HW_UPDATE_STATE)&&
             (main_lcd_operation_state!=LCD_DC_UPDATE_STATE)&&
          	 (main_lcd_operation_state!=LCD_SLEEP_STATE)&&
          	 (main_lcd_operation_state!=LCD_DC_UPDATE_SLEEP_STATE)&&
          	 (main_lcd_operation_state!=LCD_HW_UPDATE_SLEEP_STATE))
            ASSERT(0);
      }
      else
      {
         if ((sub_lcd_operation_state!=LCD_STANDBY_STATE)&&
         	 (sub_lcd_operation_state!=LCD_SW_UPDATE_STATE)&&
             (sub_lcd_operation_state!=LCD_HW_UPDATE_STATE)&&
             (sub_lcd_operation_state!=LCD_DC_UPDATE_STATE)&&
          	 (sub_lcd_operation_state!=LCD_SLEEP_STATE)&&
          	 (sub_lcd_operation_state!=LCD_DC_UPDATE_SLEEP_STATE)&&
          	 (sub_lcd_operation_state!=LCD_HW_UPDATE_SLEEP_STATE))
            ASSERT(0);
      }
   #endif /* DUAL_LCD */   
	#endif
	lcd_power_up();
   lcd_layer_base_addr+=lcd_layer*LCD_LAYER_ADDR_OFFSET;

	#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
   lcd_layer_ctrl_reg=(layer_data->source_key << 16);
   #else
   lcd_layer_ctrl_reg=0;
   #endif

   if (layer_data->source_key_enable)
      lcd_layer_ctrl_reg |= LCD_LAYER_CTRL_SOURCE_KEY_ENABLE_BIT;

	#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
   if (layer_data->color_palette_enable)
      lcd_layer_ctrl_reg |= LCD_LAYER_CTRL_LUT_ENABLE_BIT;

   if (layer_data->color_palette_select)
      lcd_layer_ctrl_reg |= LCD_LAYER_CTRL_LUT1_SELECT_BIT;
   #endif

   if (layer_data->opacity_enable)
      lcd_layer_ctrl_reg |= LCD_LAYER_CTRL_OPACITY_ENABLE_BIT;

	#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
   lcd_layer_ctrl_reg |= ((layer_data->opacity_value)<<3);
   #else
   lcd_layer_ctrl_reg |= (layer_data->opacity_value);
   #endif

   #if (defined(MT6217)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229))
   	if (layer_data->rotate_value>LCD_LAYER_MIRROR_ROTATE_270)
   		ASSERT(0);
      lcd_layer_ctrl_reg |= ((layer_data->rotate_value)<<11);
   #endif
   #if (defined(MT6228)||defined(MT6229))
   if (layer_data->source_color_format>LCD_LAYER_SOURCE_MONO)
   	ASSERT(0);
   	#ifdef DUAL_LCD
   if ((main_lcd_operation_state==LCD_DC_UPDATE_STATE)||
   	 (main_lcd_operation_state==LCD_DC_UPDATE_SLEEP_STATE)||
   	 (sub_lcd_operation_state==LCD_DC_UPDATE_STATE)||
   	 (sub_lcd_operation_state==LCD_DC_UPDATE_SLEEP_STATE))
   	#else
	if ((main_lcd_operation_state==LCD_DC_UPDATE_STATE)||
		 (main_lcd_operation_state==LCD_DC_UPDATE_SLEEP_STATE))
		#endif
	{
		if ((LCD_LAYER0_ENABLE>>lcd_layer)!=GET_LCD_DIRECT_COUPLE_LAYER)
		{
		   if (layer_data->source_color_format!=LCD_LAYER_SOURCE_MONO)
		   	lcd_layer_ctrl_reg |= (layer_data->source_color_format<<9);
		}
		else
			lcd_layer_ctrl_reg |= (DRV_Reg(lcd_layer_base_addr) & LCD_LAYER_CTRL_COLOR_FORMAT_MASK);
	}
	else
	{
   if (layer_data->source_color_format!=LCD_LAYER_SOURCE_MONO)
   	lcd_layer_ctrl_reg |= (layer_data->source_color_format<<9);
	}
   #endif
   DRV_WriteReg32(lcd_layer_base_addr,lcd_layer_ctrl_reg);

	#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
   DRV_WriteReg32(lcd_layer_base_addr+4,(layer_data->x_offset)|(layer_data->y_offset<<16));
   DRV_WriteReg32(lcd_layer_base_addr+8,layer_data->frame_buffer_address);
   DRV_WriteReg32(lcd_layer_base_addr+0x0C,(layer_data->column_number)|(layer_data->row_number<<16));
   #elif (defined(MT6228)||defined(MT6229))
   DRV_WriteReg32(lcd_layer_base_addr+0x04,layer_data->source_key);
   DRV_WriteReg32(lcd_layer_base_addr+0x08,(layer_data->x_offset)|(layer_data->y_offset<<16));
   DRV_WriteReg32(lcd_layer_base_addr+0x0C,layer_data->frame_buffer_address);
   DRV_WriteReg32(lcd_layer_base_addr+0x10,(layer_data->column_number)|(layer_data->row_number<<16));
   #endif

	lcd_power_down();
   return KAL_TRUE;
#elif (defined(MT6205B)||defined(MT6208))
	lcd_frame_buffer_address=layer_data->frame_buffer_address;
#endif	/* MT6218B, MT6219 */
}  /* config_lcd_layer_window() */

void config_lcd_layer_offset(kal_uint8 lcd_layer, kal_uint16 layer_offset_x, kal_uint16 layer_offset_y)
{
#if (defined(MT6217)||defined(MT6218B)||defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229))
	switch (lcd_layer)
	{
		case LCD_LAYER0:
			SET_LCD_LAYER0_WINDOW_OFFSET(layer_offset_x,layer_offset_y);
		break;
		case LCD_LAYER1:
			SET_LCD_LAYER1_WINDOW_OFFSET(layer_offset_x,layer_offset_y);
		break;
		case LCD_LAYER2:
			SET_LCD_LAYER2_WINDOW_OFFSET(layer_offset_x,layer_offset_y);
		break;
		case LCD_LAYER3:
			SET_LCD_LAYER3_WINDOW_OFFSET(layer_offset_x,layer_offset_y);
		break;
	#if (defined(MT6228)||defined(MT6229))
		case LCD_LAYER4:
			SET_LCD_LAYER4_WINDOW_OFFSET(layer_offset_x,layer_offset_y);
		break;
		case LCD_LAYER5:
			SET_LCD_LAYER5_WINDOW_OFFSET(layer_offset_x,layer_offset_y);
		break;
	#endif
	}
#endif
}	/* config_lcd_layer_offset() */

#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229))
void config_lcd_hw_layer(kal_uint32 hw_layer,kal_uint16 layer_offset_x,kal_uint16 layer_offset_y,
 								 kal_uint16 layer_width, kal_uint16 layer_height)
{
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
	#if (defined(MT6228)||defined(MT6229))
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
	#endif
/* under construction !*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -