lcd: add lcd_init_level to control lcd display [2/2]

PD#TV-9856

Problem:
need change display driver for cool boot to enter
kernel stage freeze mode

Solution:
add lcd_panel_ctrl to control lcd display

Verify:
t962x2-x301

Change-Id: I8b58ab0a0f87c49791af7dddf7b05db37f7ad716
Signed-off-by: shaochan.liu <shaochan.liu@amlogic.com>
This commit is contained in:
shaochan.liu
2019-09-11 14:03:03 +08:00
committed by Tao Zeng
parent 3ed69ef88f
commit 2822376c87
5 changed files with 42 additions and 12 deletions

View File

@@ -37,6 +37,7 @@
#ifdef CONFIG_AMLOGIC_LCD
#include <linux/amlogic/media/vout/lcd/lcd_notify.h>
#include <linux/amlogic/media/vout/lcd/lcd_unifykey.h>
#include <linux/amlogic/media/vout/lcd/lcd_vout.h>
#endif
#ifdef CONFIG_AMLOGIC_BL_EXTERN
#include <linux/amlogic/media/vout/lcd/aml_bl_extern.h>
@@ -3429,8 +3430,15 @@ static const struct of_device_id bl_dt_match_table[] = {
static void aml_bl_init_status_update(void)
{
struct aml_lcd_drv_s *lcd_drv = aml_lcd_get_driver();
struct lcd_config_s *pconf;
unsigned int state;
pconf = lcd_drv->lcd_config;
if (pconf->lcd_boot_ctrl->lcd_init_level)
return;
state = bl_vcbus_read(ENCL_VIDEO_EN);
if (state == 0) /* default disable lcd & backlight */
return;

View File

@@ -40,7 +40,8 @@
/* 20190225: optimize unifykey read flow to avoid crash */
/* 20190308: add more panel clk_ss_level step for tl1 */
/* 20190520: add vbyone hw filter user define support */
#define LCD_DRV_VERSION "20190520"
/* 20190911: add lcd_init_level for tl1 */
#define LCD_DRV_VERSION "20190911"
#define VPP_OUT_SATURATE (1 << 0)

View File

@@ -555,6 +555,7 @@ int lcd_tcon_core_reg_get(unsigned char *buf, unsigned int size)
int lcd_tcon_od_set(int flag)
{
struct aml_lcd_drv_s *lcd_drv = aml_lcd_get_driver();
unsigned int reg, bit, temp;
int ret;
@@ -575,6 +576,9 @@ int lcd_tcon_od_set(int flag)
}
}
if (!(lcd_drv->lcd_status & LCD_STATUS_IF_ON))
return -1;
reg = lcd_tcon_data->reg_core_od;
bit = lcd_tcon_data->bit_od_en;
if (lcd_tcon_data->core_reg_width == 8)

View File

@@ -195,6 +195,7 @@ static struct lcd_boot_ctrl_s lcd_boot_ctrl_config = {
.lcd_type = LCD_TYPE_MAX,
.lcd_bits = 0,
.advanced_flag = 0,
.lcd_init_level = 0,
.debug_print_flag = 0,
.debug_test_pattern = 0,
.debug_para_source = 0,
@@ -370,6 +371,12 @@ static void lcd_power_encl_on(void)
{
mutex_lock(&lcd_vout_mutex);
if (lcd_driver->lcd_status & LCD_STATUS_ENCL_ON) {
LCDPR("%s: on already\n", __func__);
mutex_unlock(&lcd_vout_mutex);
return;
}
lcd_driver->driver_init_pre();
lcd_driver->lcd_status |= LCD_STATUS_ENCL_ON;
@@ -396,6 +403,11 @@ static void lcd_power_encl_off(void)
{
mutex_lock(&lcd_vout_mutex);
if (!(lcd_driver->lcd_status & LCD_STATUS_ENCL_ON)) {
LCDPR("%s: off already\n", __func__);
mutex_unlock(&lcd_vout_mutex);
return;
}
lcd_driver->lcd_status &= ~LCD_STATUS_ENCL_ON;
lcd_driver->driver_disable_post();
@@ -410,21 +422,21 @@ static void lcd_power_encl_off(void)
static void lcd_power_if_on(void)
{
mutex_lock(&lcd_vout_mutex);
lcd_driver->power_ctrl(1);
lcd_driver->lcd_status |= LCD_STATUS_IF_ON;
if (!(lcd_driver->lcd_status & LCD_STATUS_IF_ON)) {
lcd_driver->power_ctrl(1);
lcd_driver->lcd_status |= LCD_STATUS_IF_ON;
}
lcd_driver->lcd_config->change_flag = 0;
mutex_unlock(&lcd_vout_mutex);
}
static void lcd_power_if_off(void)
{
mutex_lock(&lcd_vout_mutex);
lcd_driver->lcd_status &= ~LCD_STATUS_IF_ON;
lcd_driver->power_ctrl(0);
if (lcd_driver->lcd_status & LCD_STATUS_IF_ON) {
lcd_driver->lcd_status &= ~LCD_STATUS_IF_ON;
lcd_driver->power_ctrl(0);
}
mutex_unlock(&lcd_vout_mutex);
}
@@ -1216,7 +1228,10 @@ static void lcd_config_default(void)
pconf->lcd_basic.v_active = lcd_vcbus_read(ENCL_VIDEO_VAVON_ELINE)
- lcd_vcbus_read(ENCL_VIDEO_VAVON_BLINE) + 1;
if (lcd_vcbus_read(ENCL_VIDEO_EN)) {
lcd_driver->lcd_status = LCD_STATUS_ON;
if (lcd_boot_ctrl_config.lcd_init_level)
lcd_driver->lcd_status = LCD_STATUS_ENCL_ON;
else
lcd_driver->lcd_status = LCD_STATUS_ON;
lcd_resume_flag = 1;
} else {
lcd_driver->lcd_status = 0;
@@ -1687,7 +1702,8 @@ static int __init lcd_boot_ctrl_setup(char *str)
lcd_boot_ctrl_config.lcd_type = 0xf & lcd_ctrl;
lcd_boot_ctrl_config.lcd_bits = 0xf & (lcd_ctrl >> 4);
lcd_boot_ctrl_config.advanced_flag = 0xff & (lcd_ctrl >> 8);
lcd_boot_ctrl_config.debug_print_flag = 0xf & (lcd_ctrl >> 16);
lcd_boot_ctrl_config.lcd_init_level = 0x1 & (lcd_ctrl >> 19);
lcd_boot_ctrl_config.debug_print_flag = 0xf & (lcd_ctrl >> 20);
lcd_boot_ctrl_config.debug_test_pattern = 0xf & (lcd_ctrl >> 24);
lcd_boot_ctrl_config.debug_para_source = 0x3 & (lcd_ctrl >> 28);
lcd_boot_ctrl_config.debug_lcd_mode = 0x3 & (lcd_ctrl >> 30);

View File

@@ -436,7 +436,8 @@ struct lcd_boot_ctrl_s {
unsigned char lcd_type; //bit[3:0]
unsigned char lcd_bits; //bit[7:4] bits:6 or 8
unsigned char advanced_flag; //bit[15:8]
unsigned char debug_print_flag; //bit[19:16]
unsigned char lcd_init_level; //bit[19]
unsigned char debug_print_flag; //bit[23:20]
unsigned char debug_test_pattern; //bit[27:24]
unsigned char debug_para_source;//bit[29:28]
//0:normal, 1:dts, 2:unifykey, 3:TBD