mirror of
https://github.com/CTCaer/hekate
synced 2024-12-22 19:31:12 +00:00
display: Add T210B01 support
This commit is contained in:
parent
147fed39c8
commit
ccaf49bece
4 changed files with 238 additions and 95 deletions
181
bdk/gfx/di.c
181
bdk/gfx/di.c
|
@ -22,6 +22,7 @@
|
||||||
#include <power/max7762x.h>
|
#include <power/max7762x.h>
|
||||||
#include <soc/clock.h>
|
#include <soc/clock.h>
|
||||||
#include <soc/gpio.h>
|
#include <soc/gpio.h>
|
||||||
|
#include <soc/hw_init.h>
|
||||||
#include <soc/i2c.h>
|
#include <soc/i2c.h>
|
||||||
#include <soc/pinmux.h>
|
#include <soc/pinmux.h>
|
||||||
#include <soc/pmc.h>
|
#include <soc/pmc.h>
|
||||||
|
@ -59,10 +60,26 @@ void display_init()
|
||||||
if (CLOCK(CLK_RST_CONTROLLER_CLK_ENB_L_SET) & BIT(CLK_L_DISP1))
|
if (CLOCK(CLK_RST_CONTROLLER_CLK_ENB_L_SET) & BIT(CLK_L_DISP1))
|
||||||
_display_panel_and_hw_end(true);
|
_display_panel_and_hw_end(true);
|
||||||
|
|
||||||
|
// Get Chip ID.
|
||||||
|
bool tegra_t210 = hw_get_chip_id() == GP_HIDREV_MAJOR_T210;
|
||||||
|
|
||||||
// Power on.
|
// T210B01: Power on SD2 regulator for supplying LD0.
|
||||||
|
if (!tegra_t210)
|
||||||
|
{
|
||||||
|
// Set SD2 regulator voltage.
|
||||||
|
max77620_regulator_set_voltage(REGULATOR_SD2, 1325000);
|
||||||
|
|
||||||
|
// Set slew rate and enable SD2 regulator.
|
||||||
|
i2c_send_byte(I2C_5, MAX77620_I2C_ADDR, MAX77620_REG_SD2_CFG, (1 << MAX77620_SD_SR_SHIFT) | MAX77620_SD_CFG1_FSRADE_SD_ENABLE);
|
||||||
|
max77620_regulator_enable(REGULATOR_SD2, 1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enable power to display panel controller.
|
||||||
max77620_regulator_set_volt_and_flags(REGULATOR_LDO0, 1200000, MAX77620_POWER_MODE_NORMAL); // Configure to 1.2V.
|
max77620_regulator_set_volt_and_flags(REGULATOR_LDO0, 1200000, MAX77620_POWER_MODE_NORMAL); // Configure to 1.2V.
|
||||||
i2c_send_byte(I2C_5, MAX77620_I2C_ADDR, MAX77620_REG_GPIO7, MAX77620_CNFG_GPIO_OUTPUT_VAL_HIGH | MAX77620_CNFG_GPIO_DRV_PUSHPULL);
|
if (tegra_t210)
|
||||||
|
i2c_send_byte(I2C_5, MAX77620_I2C_ADDR, MAX77620_REG_GPIO7,
|
||||||
|
MAX77620_CNFG_GPIO_OUTPUT_VAL_HIGH | MAX77620_CNFG_GPIO_DRV_PUSHPULL); // T210: LD0 -> GPIO7 -> Display panel.
|
||||||
|
|
||||||
// Enable Display Interface specific clocks.
|
// Enable Display Interface specific clocks.
|
||||||
CLOCK(CLK_RST_CONTROLLER_RST_DEV_H_CLR) = BIT(CLK_H_MIPI_CAL) | BIT(CLK_H_DSI);
|
CLOCK(CLK_RST_CONTROLLER_RST_DEV_H_CLR) = BIT(CLK_H_MIPI_CAL) | BIT(CLK_H_DSI);
|
||||||
|
@ -81,63 +98,101 @@ void display_init()
|
||||||
PMC(APBDEV_PMC_IO_DPD_REQ) = PMC_IO_DPD_REQ_DPD_OFF;
|
PMC(APBDEV_PMC_IO_DPD_REQ) = PMC_IO_DPD_REQ_DPD_OFF;
|
||||||
PMC(APBDEV_PMC_IO_DPD2_REQ) = PMC_IO_DPD_REQ_DPD_OFF;
|
PMC(APBDEV_PMC_IO_DPD2_REQ) = PMC_IO_DPD_REQ_DPD_OFF;
|
||||||
|
|
||||||
// Config LCD and Backlight pins.
|
// Configure LCD pins.
|
||||||
PINMUX_AUX(PINMUX_AUX_NFC_EN) &= ~PINMUX_TRISTATE; // PULL_DOWN
|
PINMUX_AUX(PINMUX_AUX_NFC_EN) &= ~PINMUX_TRISTATE; // PULL_DOWN
|
||||||
PINMUX_AUX(PINMUX_AUX_NFC_INT) &= ~PINMUX_TRISTATE; // PULL_DOWN
|
PINMUX_AUX(PINMUX_AUX_NFC_INT) &= ~PINMUX_TRISTATE; // PULL_DOWN
|
||||||
PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) &= ~PINMUX_TRISTATE; // PULL_DOWN | 1
|
|
||||||
PINMUX_AUX(PINMUX_AUX_LCD_BL_EN) &= ~PINMUX_TRISTATE; // PULL_DOWN
|
|
||||||
PINMUX_AUX(PINMUX_AUX_LCD_RST) &= ~PINMUX_TRISTATE; // PULL_DOWN
|
PINMUX_AUX(PINMUX_AUX_LCD_RST) &= ~PINMUX_TRISTATE; // PULL_DOWN
|
||||||
|
|
||||||
// Set Backlight +-5V pins mode and direction
|
// Configure Backlight pins.
|
||||||
|
PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) &= ~PINMUX_TRISTATE; // PULL_DOWN | 1
|
||||||
|
PINMUX_AUX(PINMUX_AUX_LCD_BL_EN) &= ~PINMUX_TRISTATE; // PULL_DOWN
|
||||||
|
|
||||||
|
// Set LCD +-5V pins mode and direction
|
||||||
gpio_config(GPIO_PORT_I, GPIO_PIN_0 | GPIO_PIN_1, GPIO_MODE_GPIO);
|
gpio_config(GPIO_PORT_I, GPIO_PIN_0 | GPIO_PIN_1, GPIO_MODE_GPIO);
|
||||||
gpio_output_enable(GPIO_PORT_I, GPIO_PIN_0 | GPIO_PIN_1, GPIO_OUTPUT_ENABLE);
|
gpio_output_enable(GPIO_PORT_I, GPIO_PIN_0 | GPIO_PIN_1, GPIO_OUTPUT_ENABLE);
|
||||||
|
|
||||||
// Enable Backlight power.
|
// Enable LCD power.
|
||||||
gpio_write(GPIO_PORT_I, GPIO_PIN_0, GPIO_HIGH); // Backlight +5V enable.
|
gpio_write(GPIO_PORT_I, GPIO_PIN_0, GPIO_HIGH); // LCD +5V enable.
|
||||||
usleep(10000);
|
usleep(10000);
|
||||||
gpio_write(GPIO_PORT_I, GPIO_PIN_1, GPIO_HIGH); // Backlight -5V enable.
|
gpio_write(GPIO_PORT_I, GPIO_PIN_1, GPIO_HIGH); // LCD -5V enable.
|
||||||
usleep(10000);
|
usleep(10000);
|
||||||
|
|
||||||
// Configure Backlight pins (PWM, EN, RST).
|
// Configure Backlight PWM/EN and LCD RST pins (BL PWM, BL EN, LCD RST).
|
||||||
gpio_config(GPIO_PORT_V, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2, GPIO_MODE_GPIO);
|
gpio_config(GPIO_PORT_V, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2, GPIO_MODE_GPIO);
|
||||||
gpio_output_enable(GPIO_PORT_V, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2, GPIO_OUTPUT_ENABLE);
|
gpio_output_enable(GPIO_PORT_V, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2, GPIO_OUTPUT_ENABLE);
|
||||||
gpio_write(GPIO_PORT_V, GPIO_PIN_1, GPIO_HIGH); // Enable Backlight EN.
|
|
||||||
|
// Enable Backlight power.
|
||||||
|
gpio_write(GPIO_PORT_V, GPIO_PIN_1, GPIO_HIGH);
|
||||||
|
|
||||||
// Power up supply regulator for display interface.
|
// Power up supply regulator for display interface.
|
||||||
MIPI_CAL(_DSIREG(MIPI_CAL_MIPI_BIAS_PAD_CFG2)) = 0;
|
MIPI_CAL(_DSIREG(MIPI_CAL_MIPI_BIAS_PAD_CFG2)) = 0;
|
||||||
|
|
||||||
|
if (!tegra_t210)
|
||||||
|
{
|
||||||
|
MIPI_CAL(_DSIREG(MIPI_CAL_MIPI_BIAS_PAD_CFG0)) = 0;
|
||||||
|
APB_MISC(APB_MISC_GP_DSI_PAD_CONTROL) = 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Set DISP1 clock source and parent clock.
|
// Set DISP1 clock source and parent clock.
|
||||||
CLOCK(CLK_RST_CONTROLLER_CLK_SOURCE_DISP1) = 0x40000000; // PLLD_OUT.
|
CLOCK(CLK_RST_CONTROLLER_CLK_SOURCE_DISP1) = 0x40000000; // PLLD_OUT.
|
||||||
u32 plld_div = (3 << 20) | (20 << 11) | 1; // DIVM: 1, DIVN: 20, DIVP: 3. PLLD_OUT: 768 MHz, PLLD_OUT0 (DSI): 96 MHz.
|
u32 plld_div = (3 << 20) | (20 << 11) | 1; // DIVM: 1, DIVN: 20, DIVP: 3. PLLD_OUT: 768 MHz, PLLD_OUT0 (DSI): 96 MHz.
|
||||||
CLOCK(CLK_RST_CONTROLLER_PLLD_BASE) = PLLCX_BASE_ENABLE | PLLCX_BASE_LOCK | plld_div;
|
CLOCK(CLK_RST_CONTROLLER_PLLD_BASE) = PLLCX_BASE_ENABLE | PLLCX_BASE_LOCK | plld_div;
|
||||||
|
|
||||||
|
if (tegra_t210)
|
||||||
|
{
|
||||||
CLOCK(CLK_RST_CONTROLLER_PLLD_MISC1) = 0x20; // PLLD_SETUP.
|
CLOCK(CLK_RST_CONTROLLER_PLLD_MISC1) = 0x20; // PLLD_SETUP.
|
||||||
CLOCK(CLK_RST_CONTROLLER_PLLD_MISC) = 0x2D0AAA; // PLLD_ENABLE_CLK.
|
CLOCK(CLK_RST_CONTROLLER_PLLD_MISC) = 0x2D0AAA; // PLLD_ENABLE_CLK.
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CLOCK(CLK_RST_CONTROLLER_PLLD_MISC1) = 0;
|
||||||
|
CLOCK(CLK_RST_CONTROLLER_PLLD_MISC) = 0x2DFC00; // PLLD_ENABLE_CLK.
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setup Display Interface initial window configuration.
|
||||||
|
exec_cfg((u32 *)DISPLAY_A_BASE, _display_dc_setup_win_config, 94);
|
||||||
|
|
||||||
// Setup display communication interfaces.
|
// Setup display communication interfaces.
|
||||||
exec_cfg((u32 *)DISPLAY_A_BASE, _display_dc_setup_win_config, 94);
|
exec_cfg((u32 *)DSI_BASE, _display_dsi_init_config_part1, 8);
|
||||||
exec_cfg((u32 *)DSI_BASE, _display_dsi_init_config, 61);
|
if (tegra_t210)
|
||||||
|
DSI(_DSIREG(DSI_INIT_SEQ_DATA_15)) = 0;
|
||||||
|
else
|
||||||
|
DSI(_DSIREG(DSI_INIT_SEQ_DATA_15_B01)) = 0;
|
||||||
|
exec_cfg((u32 *)DSI_BASE, _display_dsi_init_config_part2, 14);
|
||||||
|
if (!tegra_t210)
|
||||||
|
exec_cfg((u32 *)DSI_BASE, _display_dsi_init_config_part3_t210b01, 7);
|
||||||
|
exec_cfg((u32 *)DSI_BASE, _display_dsi_init_config_part4, 10);
|
||||||
|
DSI(_DSIREG(DSI_PHY_TIMING_0)) = tegra_t210 ? 0x6070601 : 0x6070603;
|
||||||
|
exec_cfg((u32 *)DSI_BASE, _display_dsi_init_config_part5, 12);
|
||||||
|
DSI(_DSIREG(DSI_PHY_TIMING_0)) = tegra_t210 ? 0x6070601 : 0x6070603;
|
||||||
|
exec_cfg((u32 *)DSI_BASE, _display_dsi_init_config_part6, 14);
|
||||||
usleep(10000);
|
usleep(10000);
|
||||||
|
|
||||||
// Enable Backlight Reset.
|
// Enable LCD Reset.
|
||||||
gpio_write(GPIO_PORT_V, GPIO_PIN_2, GPIO_HIGH);
|
gpio_write(GPIO_PORT_V, GPIO_PIN_2, GPIO_HIGH);
|
||||||
usleep(60000);
|
usleep(60000);
|
||||||
|
|
||||||
// Setups DSI packet configuration and request display id.
|
// Setup DSI device takeover timeout.
|
||||||
DSI(_DSIREG(DSI_BTA_TIMING)) = 0x50204;
|
DSI(_DSIREG(DSI_BTA_TIMING)) = 0x50204;
|
||||||
|
|
||||||
|
// Set reply size.
|
||||||
_display_dsi_send_cmd(MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE, 3, 0);
|
_display_dsi_send_cmd(MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE, 3, 0);
|
||||||
_display_dsi_wait(250000, _DSIREG(DSI_TRIGGER), DSI_TRIGGER_HOST | DSI_TRIGGER_VIDEO);
|
_display_dsi_wait(250000, _DSIREG(DSI_TRIGGER), DSI_TRIGGER_HOST | DSI_TRIGGER_VIDEO);
|
||||||
|
|
||||||
|
// Request register read.
|
||||||
_display_dsi_send_cmd(MIPI_DSI_DCS_READ, MIPI_DCS_GET_DISPLAY_ID, 0);
|
_display_dsi_send_cmd(MIPI_DSI_DCS_READ, MIPI_DCS_GET_DISPLAY_ID, 0);
|
||||||
_display_dsi_wait(250000, _DSIREG(DSI_TRIGGER), DSI_TRIGGER_HOST | DSI_TRIGGER_VIDEO);
|
_display_dsi_wait(250000, _DSIREG(DSI_TRIGGER), DSI_TRIGGER_HOST | DSI_TRIGGER_VIDEO);
|
||||||
|
|
||||||
|
// Transfer bus control to device for transmitting the reply.
|
||||||
DSI(_DSIREG(DSI_HOST_CONTROL)) = DSI_HOST_CONTROL_TX_TRIG_HOST | DSI_HOST_CONTROL_IMM_BTA | DSI_HOST_CONTROL_CS | DSI_HOST_CONTROL_ECC;
|
DSI(_DSIREG(DSI_HOST_CONTROL)) = DSI_HOST_CONTROL_TX_TRIG_HOST | DSI_HOST_CONTROL_IMM_BTA | DSI_HOST_CONTROL_CS | DSI_HOST_CONTROL_ECC;
|
||||||
_display_dsi_wait(150000, _DSIREG(DSI_HOST_CONTROL), DSI_HOST_CONTROL_IMM_BTA);
|
_display_dsi_wait(150000, _DSIREG(DSI_HOST_CONTROL), DSI_HOST_CONTROL_IMM_BTA);
|
||||||
|
|
||||||
|
// Wait a bit for the reply.
|
||||||
usleep(5000);
|
usleep(5000);
|
||||||
|
|
||||||
// MIPI_DCS_GET_DISPLAY_ID reply is a long read, size 3 u32.
|
// MIPI_DCS_GET_DISPLAY_ID reply is a long read, size 3 x u32.
|
||||||
for (u32 i = 0; i < 3; i++)
|
for (u32 i = 0; i < 3; i++)
|
||||||
_display_id = DSI(_DSIREG(DSI_RD_DATA)); // Skip ack and msg type info and get the payload (display id).
|
_display_id = DSI(_DSIREG(DSI_RD_DATA)) & 0xFFFFFF; // Skip ack and msg type info and get the payload (display id).
|
||||||
|
|
||||||
// Save raw Display ID to Nyx storage.
|
// Save raw Display ID to Nyx storage.
|
||||||
nyx_str->info.disp_id = _display_id;
|
nyx_str->info.disp_id = _display_id;
|
||||||
|
@ -155,22 +210,28 @@ void display_init()
|
||||||
exec_cfg((u32 *)DSI_BASE, _display_init_config_jdi, 43);
|
exec_cfg((u32 *)DSI_BASE, _display_init_config_jdi, 43);
|
||||||
_display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE, MIPI_DCS_EXIT_SLEEP_MODE, 180000);
|
_display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE, MIPI_DCS_EXIT_SLEEP_MODE, 180000);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PANEL_INL_P062CCA_AZ1:
|
case PANEL_INL_P062CCA_AZ1:
|
||||||
case PANEL_AUO_A062TAN01:
|
case PANEL_AUO_A062TAN01:
|
||||||
_display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE, MIPI_DCS_EXIT_SLEEP_MODE, 180000);
|
_display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE, MIPI_DCS_EXIT_SLEEP_MODE, 180000);
|
||||||
|
|
||||||
|
// Unlock extension cmds.
|
||||||
DSI(_DSIREG(DSI_WR_DATA)) = 0x439; // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
|
DSI(_DSIREG(DSI_WR_DATA)) = 0x439; // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
|
||||||
DSI(_DSIREG(DSI_WR_DATA)) = 0x9483FFB9; // Enable extension cmd. (Pass: FF 83 94).
|
DSI(_DSIREG(DSI_WR_DATA)) = 0x9483FFB9; // MIPI_DCS_PRIV_SET_EXTC. (Pass: FF 83 94).
|
||||||
DSI(_DSIREG(DSI_TRIGGER)) = DSI_TRIGGER_HOST;
|
DSI(_DSIREG(DSI_TRIGGER)) = DSI_TRIGGER_HOST;
|
||||||
usleep(5000);
|
usleep(5000);
|
||||||
|
|
||||||
|
// Set Power control.
|
||||||
DSI(_DSIREG(DSI_WR_DATA)) = 0x739; // MIPI_DSI_DCS_LONG_WRITE: 7 bytes.
|
DSI(_DSIREG(DSI_WR_DATA)) = 0x739; // MIPI_DSI_DCS_LONG_WRITE: 7 bytes.
|
||||||
if (_display_id == PANEL_INL_P062CCA_AZ1)
|
if (_display_id == PANEL_INL_P062CCA_AZ1)
|
||||||
DSI(_DSIREG(DSI_WR_DATA)) = 0x751548B1; // Set Power control. (Not deep standby, BT5 / XDK, VRH gamma volt adj 53 / x40).
|
DSI(_DSIREG(DSI_WR_DATA)) = 0x751548B1; // MIPI_DCS_PRIV_SET_POWER_CONTROL. (Not deep standby, BT5 / XDK, VRH gamma volt adj 53 / x40).
|
||||||
else
|
else // PANEL_AUO_A062TAN01.
|
||||||
DSI(_DSIREG(DSI_WR_DATA)) = 0x711148B1; // Set Power control. (Not deep standby, BT1 / XDK, VRH gamma volt adj 49 / x40).
|
DSI(_DSIREG(DSI_WR_DATA)) = 0x711148B1; // MIPI_DCS_PRIV_SET_POWER_CONTROL. (Not deep standby, BT1 / XDK, VRH gamma volt adj 49 / x40).
|
||||||
DSI(_DSIREG(DSI_WR_DATA)) = 0x143209; // (NVRH gamma volt adj 9, Amplifier current small / x30, FS0 freq Fosc/80 / FS1 freq Fosc/32).
|
DSI(_DSIREG(DSI_WR_DATA)) = 0x143209; // (NVRH gamma volt adj 9, Amplifier current small / x30, FS0 freq Fosc/80 / FS1 freq Fosc/32).
|
||||||
DSI(_DSIREG(DSI_TRIGGER)) = DSI_TRIGGER_HOST;
|
DSI(_DSIREG(DSI_TRIGGER)) = DSI_TRIGGER_HOST;
|
||||||
usleep(5000);
|
usleep(5000);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PANEL_INL_2J055IA_27A:
|
case PANEL_INL_2J055IA_27A:
|
||||||
case PANEL_AUO_A055TAN01:
|
case PANEL_AUO_A055TAN01:
|
||||||
default: // Allow spare part displays to work.
|
default: // Allow spare part displays to work.
|
||||||
|
@ -178,25 +239,52 @@ void display_init()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Unblank display.
|
||||||
_display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE, MIPI_DCS_SET_DISPLAY_ON, 20000);
|
_display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE, MIPI_DCS_SET_DISPLAY_ON, 20000);
|
||||||
|
|
||||||
// Configure PLLD for DISP1.
|
// Configure PLLD for DISP1.
|
||||||
plld_div = (1 << 20) | (24 << 11) | 1; // DIVM: 1, DIVN: 24, DIVP: 1. PLLD_OUT: 768 MHz, PLLD_OUT0 (DSI): 230.4 MHz.
|
plld_div = (1 << 20) | (24 << 11) | 1; // DIVM: 1, DIVN: 24, DIVP: 1. PLLD_OUT: 768 MHz, PLLD_OUT0 (DSI): 230.4 MHz.
|
||||||
CLOCK(CLK_RST_CONTROLLER_PLLD_BASE) = PLLCX_BASE_ENABLE | PLLCX_BASE_LOCK | plld_div;
|
CLOCK(CLK_RST_CONTROLLER_PLLD_BASE) = PLLCX_BASE_ENABLE | PLLCX_BASE_LOCK | plld_div;
|
||||||
CLOCK(CLK_RST_CONTROLLER_PLLD_MISC1) = 0x20;
|
|
||||||
|
if (tegra_t210)
|
||||||
|
CLOCK(CLK_RST_CONTROLLER_PLLD_MISC1) = 0x20; // PLLD_SETUP
|
||||||
|
else
|
||||||
|
CLOCK(CLK_RST_CONTROLLER_PLLD_MISC1) = 0;
|
||||||
CLOCK(CLK_RST_CONTROLLER_PLLD_MISC) = 0x2DFC00; // Use new PLLD_SDM_DIN.
|
CLOCK(CLK_RST_CONTROLLER_PLLD_MISC) = 0x2DFC00; // Use new PLLD_SDM_DIN.
|
||||||
|
|
||||||
// Finalize DSI configuration.
|
// Finalize DSI configuration.
|
||||||
exec_cfg((u32 *)DSI_BASE, _display_dsi_packet_config, 21);
|
DSI(_DSIREG(DSI_PAD_CONTROL_1)) = 0;
|
||||||
|
DSI(_DSIREG(DSI_PHY_TIMING_0)) = tegra_t210 ? 0x6070601 : 0x6070603;
|
||||||
|
exec_cfg((u32 *)DSI_BASE, _display_dsi_packet_config, 19);
|
||||||
// Set pixel clock dividers: 230.4 / 3 / 1 = 76.8 MHz. 60 Hz.
|
// Set pixel clock dividers: 230.4 / 3 / 1 = 76.8 MHz. 60 Hz.
|
||||||
DISPLAY_A(_DIREG(DC_DISP_DISP_CLOCK_CONTROL)) = PIXEL_CLK_DIVIDER_PCD1 | SHIFT_CLK_DIVIDER(4); // 4: div3.
|
DISPLAY_A(_DIREG(DC_DISP_DISP_CLOCK_CONTROL)) = PIXEL_CLK_DIVIDER_PCD1 | SHIFT_CLK_DIVIDER(4); // 4: div3.
|
||||||
exec_cfg((u32 *)DSI_BASE, _display_dsi_mode_config, 10);
|
exec_cfg((u32 *)DSI_BASE, _display_dsi_mode_config, 10);
|
||||||
usleep(10000);
|
usleep(10000);
|
||||||
|
|
||||||
// Calibrate display communication pads.
|
// Calibrate display communication pads.
|
||||||
exec_cfg((u32 *)MIPI_CAL_BASE, _display_mipi_pad_cal_config, 6);
|
u32 loops = tegra_t210 ? 1 : 2; // Find out why this is done 2 times on Mariko.
|
||||||
exec_cfg((u32 *)DSI_BASE, _display_dsi_pad_cal_config, 4);
|
exec_cfg((u32 *)MIPI_CAL_BASE, _display_mipi_pad_cal_config, 4);
|
||||||
exec_cfg((u32 *)MIPI_CAL_BASE, _display_mipi_apply_dsi_cal_config, 16);
|
for (u32 i = 0; i < loops; i++)
|
||||||
|
{
|
||||||
|
// Set MIPI bias pad config.
|
||||||
|
MIPI_CAL(_DSIREG(MIPI_CAL_MIPI_BIAS_PAD_CFG2)) = 0x10010;
|
||||||
|
MIPI_CAL(_DSIREG(MIPI_CAL_MIPI_BIAS_PAD_CFG1)) = tegra_t210 ? 0x300 : 0;
|
||||||
|
|
||||||
|
// Set pad trimmers and set MIPI DSI cal offsets.
|
||||||
|
if (tegra_t210)
|
||||||
|
{
|
||||||
|
exec_cfg((u32 *)DSI_BASE, _display_dsi_pad_cal_config_t210, 4);
|
||||||
|
exec_cfg((u32 *)MIPI_CAL_BASE, _display_mipi_dsi_cal_offsets_config_t210, 4);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
exec_cfg((u32 *)DSI_BASE, _display_dsi_pad_cal_config_t210b01, 7);
|
||||||
|
exec_cfg((u32 *)MIPI_CAL_BASE, _display_mipi_dsi_cal_offsets_config_t210b01, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the rest of MIPI cal offsets and apply calibration.
|
||||||
|
exec_cfg((u32 *)MIPI_CAL_BASE, _display_mipi_apply_dsi_cal_config, 12);
|
||||||
|
}
|
||||||
usleep(10000);
|
usleep(10000);
|
||||||
|
|
||||||
// Enable video display controller.
|
// Enable video display controller.
|
||||||
|
@ -207,9 +295,9 @@ void display_backlight_pwm_init()
|
||||||
{
|
{
|
||||||
clock_enable_pwm();
|
clock_enable_pwm();
|
||||||
|
|
||||||
PWM(PWM_CONTROLLER_PWM_CSR_0) = PWM_CSR_EN; // Enable PWM and set it to 25KHz PFM.
|
PWM(PWM_CONTROLLER_PWM_CSR_0) = PWM_CSR_EN; // Enable PWM and set it to 25KHz PFM. 29.5KHz is stock.
|
||||||
|
|
||||||
PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) = (PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) & 0xFFFFFFFC) | 1; // PWM clock source.
|
PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) = (PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) & ~PINMUX_FUNC_MASK) | 1; // Set PWM0 mode.
|
||||||
gpio_config(GPIO_PORT_V, GPIO_PIN_0, GPIO_MODE_SPIO); // Backlight power mode.
|
gpio_config(GPIO_PORT_V, GPIO_PIN_0, GPIO_MODE_SPIO); // Backlight power mode.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -254,11 +342,15 @@ static void _display_panel_and_hw_end(bool no_panel_deinit)
|
||||||
|
|
||||||
display_backlight_brightness(0, 1000);
|
display_backlight_brightness(0, 1000);
|
||||||
|
|
||||||
|
// Enable host cmd packets during video.
|
||||||
DSI(_DSIREG(DSI_VIDEO_MODE_CONTROL)) = DSI_CMD_PKT_VID_ENABLE;
|
DSI(_DSIREG(DSI_VIDEO_MODE_CONTROL)) = DSI_CMD_PKT_VID_ENABLE;
|
||||||
|
|
||||||
|
// Blank display.
|
||||||
DSI(_DSIREG(DSI_WR_DATA)) = (MIPI_DCS_SET_DISPLAY_OFF << 8) | MIPI_DSI_DCS_SHORT_WRITE;
|
DSI(_DSIREG(DSI_WR_DATA)) = (MIPI_DCS_SET_DISPLAY_OFF << 8) | MIPI_DSI_DCS_SHORT_WRITE;
|
||||||
|
|
||||||
|
// Propagate changes to all register buffers and disable host cmd packets during video.
|
||||||
DISPLAY_A(_DIREG(DC_CMD_STATE_ACCESS)) = READ_MUX | WRITE_MUX;
|
DISPLAY_A(_DIREG(DC_CMD_STATE_ACCESS)) = READ_MUX | WRITE_MUX;
|
||||||
DSI(_DSIREG(DSI_VIDEO_MODE_CONTROL)) = 0; // Disable host cmd packet.
|
DSI(_DSIREG(DSI_VIDEO_MODE_CONTROL)) = 0;
|
||||||
|
|
||||||
// De-initialize video controller.
|
// De-initialize video controller.
|
||||||
exec_cfg((u32 *)DISPLAY_A_BASE, _display_video_disp_controller_disable_config, 17);
|
exec_cfg((u32 *)DISPLAY_A_BASE, _display_video_disp_controller_disable_config, 17);
|
||||||
|
@ -271,43 +363,47 @@ static void _display_panel_and_hw_end(bool no_panel_deinit)
|
||||||
case PANEL_JDI_XXX062M:
|
case PANEL_JDI_XXX062M:
|
||||||
exec_cfg((u32 *)DSI_BASE, _display_deinit_config_jdi, 22);
|
exec_cfg((u32 *)DSI_BASE, _display_deinit_config_jdi, 22);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PANEL_AUO_A062TAN01:
|
case PANEL_AUO_A062TAN01:
|
||||||
exec_cfg((u32 *)DSI_BASE, _display_deinit_config_auo, 37);
|
exec_cfg((u32 *)DSI_BASE, _display_deinit_config_auo, 37);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PANEL_INL_2J055IA_27A:
|
case PANEL_INL_2J055IA_27A:
|
||||||
case PANEL_AUO_A055TAN01:
|
case PANEL_AUO_A055TAN01:
|
||||||
|
// Unlock extension cmds.
|
||||||
DSI(_DSIREG(DSI_WR_DATA)) = 0x439; // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
|
DSI(_DSIREG(DSI_WR_DATA)) = 0x439; // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
|
||||||
DSI(_DSIREG(DSI_WR_DATA)) = 0x9483FFB9; // Enable extension cmd. (Pass: FF 83 94).
|
DSI(_DSIREG(DSI_WR_DATA)) = 0x9483FFB9; // MIPI_DCS_PRIV_SET_EXTC. (Pass: FF 83 94).
|
||||||
DSI(_DSIREG(DSI_TRIGGER)) = DSI_TRIGGER_HOST;
|
DSI(_DSIREG(DSI_TRIGGER)) = DSI_TRIGGER_HOST;
|
||||||
usleep(5000);
|
usleep(5000);
|
||||||
// Set Power.
|
|
||||||
|
// Set Power control.
|
||||||
DSI(_DSIREG(DSI_WR_DATA)) = 0xB39; // MIPI_DSI_DCS_LONG_WRITE: 11 bytes.
|
DSI(_DSIREG(DSI_WR_DATA)) = 0xB39; // MIPI_DSI_DCS_LONG_WRITE: 11 bytes.
|
||||||
if (_display_id == PANEL_INL_2J055IA_27A)
|
if (_display_id == PANEL_INL_2J055IA_27A)
|
||||||
DSI(_DSIREG(DSI_WR_DATA)) = 0x751548B1; // Set Power control. (Not deep standby, BT5 / XDK, VRH gamma volt adj 53 / x40).
|
DSI(_DSIREG(DSI_WR_DATA)) = 0x751548B1; // MIPI_DCS_PRIV_SET_POWER_CONTROL. (Not deep standby, BT5 / XDK, VRH gamma volt adj 53 / x40).
|
||||||
else
|
else
|
||||||
DSI(_DSIREG(DSI_WR_DATA)) = 0x711148B1; // Set Power control. (Not deep standby, BT1 / XDK, VRH gamma volt adj 49 / x40).
|
DSI(_DSIREG(DSI_WR_DATA)) = 0x711148B1; // MIPI_DCS_PRIV_SET_POWER_CONTROL. (Not deep standby, BT1 / XDK, VRH gamma volt adj 49 / x40).
|
||||||
// Set Power control. (NVRH gamma volt adj 9, Amplifier current small / x30, FS0 freq Fosc/80 / FS1 freq Fosc/32, Enter standby / PON / VCOMG).
|
// (NVRH gamma volt adj 9, Amplifier current small / x30, FS0 freq Fosc/80 / FS1 freq Fosc/32, Enter standby / PON / VCOMG).
|
||||||
DSI(_DSIREG(DSI_WR_DATA)) = 0x71143209;
|
DSI(_DSIREG(DSI_WR_DATA)) = 0x71143209;
|
||||||
DSI(_DSIREG(DSI_WR_DATA)) = 0x114D31; // Set Power control. (Unknown).
|
DSI(_DSIREG(DSI_WR_DATA)) = 0x114D31; // (Unknown).
|
||||||
DSI(_DSIREG(DSI_TRIGGER)) = DSI_TRIGGER_HOST;
|
DSI(_DSIREG(DSI_TRIGGER)) = DSI_TRIGGER_HOST;
|
||||||
usleep(5000);
|
usleep(5000);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PANEL_INL_P062CCA_AZ1:
|
case PANEL_INL_P062CCA_AZ1:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Blank - powerdown.
|
||||||
_display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE, MIPI_DCS_ENTER_SLEEP_MODE, 50000);
|
_display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE, MIPI_DCS_ENTER_SLEEP_MODE, 50000);
|
||||||
|
|
||||||
skip_panel_deinit:
|
skip_panel_deinit:
|
||||||
// Disable display and backlight pins.
|
// Disable LCD power pins.
|
||||||
gpio_write(GPIO_PORT_V, GPIO_PIN_2, GPIO_LOW); //Backlight Reset disable.
|
gpio_write(GPIO_PORT_V, GPIO_PIN_2, GPIO_LOW); // LCD Reset disable.
|
||||||
usleep(10000);
|
usleep(10000);
|
||||||
|
gpio_write(GPIO_PORT_I, GPIO_PIN_1, GPIO_LOW); // LCD -5V disable.
|
||||||
gpio_write(GPIO_PORT_I, GPIO_PIN_1, GPIO_LOW); //Backlight -5V disable.
|
|
||||||
usleep(10000);
|
usleep(10000);
|
||||||
|
gpio_write(GPIO_PORT_I, GPIO_PIN_0, GPIO_LOW); // LCD +5V disable.
|
||||||
gpio_write(GPIO_PORT_I, GPIO_PIN_0, GPIO_LOW); //Backlight +5V disable.
|
|
||||||
usleep(10000);
|
usleep(10000);
|
||||||
|
|
||||||
// Disable Display Interface specific clocks.
|
// Disable Display Interface specific clocks.
|
||||||
|
@ -320,9 +416,8 @@ skip_panel_deinit:
|
||||||
DSI(_DSIREG(DSI_PAD_CONTROL_0)) = DSI_PAD_CONTROL_VS1_PULLDN_CLK | DSI_PAD_CONTROL_VS1_PULLDN(0xF) | DSI_PAD_CONTROL_VS1_PDIO_CLK | DSI_PAD_CONTROL_VS1_PDIO(0xF);
|
DSI(_DSIREG(DSI_PAD_CONTROL_0)) = DSI_PAD_CONTROL_VS1_PULLDN_CLK | DSI_PAD_CONTROL_VS1_PULLDN(0xF) | DSI_PAD_CONTROL_VS1_PDIO_CLK | DSI_PAD_CONTROL_VS1_PDIO(0xF);
|
||||||
DSI(_DSIREG(DSI_POWER_CONTROL)) = 0;
|
DSI(_DSIREG(DSI_POWER_CONTROL)) = 0;
|
||||||
|
|
||||||
// Switch to automatic function mode.
|
// Switch LCD PWM backlight pin to special function mode and enable PWM0 mode.
|
||||||
gpio_config(GPIO_PORT_V, GPIO_PIN_0, GPIO_MODE_SPIO); // Backlight PWM.
|
gpio_config(GPIO_PORT_V, GPIO_PIN_0, GPIO_MODE_SPIO); // Backlight PWM.
|
||||||
|
|
||||||
PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) = (PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) & ~PINMUX_TRISTATE) | PINMUX_TRISTATE;
|
PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) = (PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) & ~PINMUX_TRISTATE) | PINMUX_TRISTATE;
|
||||||
PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) = (PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) & ~PINMUX_FUNC_MASK) | 1; // Set PWM0 mode.
|
PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) = (PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) & ~PINMUX_FUNC_MASK) | 1; // Set PWM0 mode.
|
||||||
}
|
}
|
||||||
|
|
24
bdk/gfx/di.h
24
bdk/gfx/di.h
|
@ -461,7 +461,11 @@
|
||||||
#define DSI_PAD_PREEMP_PD_CLK(x) (((x) & 0x3) << 12)
|
#define DSI_PAD_PREEMP_PD_CLK(x) (((x) & 0x3) << 12)
|
||||||
|
|
||||||
#define DSI_PAD_CONTROL_4 0x52
|
#define DSI_PAD_CONTROL_4 0x52
|
||||||
|
#define DSI_PAD_CONTROL_5_B01 0x53
|
||||||
|
#define DSI_PAD_CONTROL_6_B01 0x54
|
||||||
|
#define DSI_PAD_CONTROL_7_B01 0x55
|
||||||
#define DSI_INIT_SEQ_DATA_15 0x5F
|
#define DSI_INIT_SEQ_DATA_15 0x5F
|
||||||
|
#define DSI_INIT_SEQ_DATA_15_B01 0x62
|
||||||
|
|
||||||
/*! MIPI registers. */
|
/*! MIPI registers. */
|
||||||
#define MIPI_CAL_MIPI_CAL_CTRL (0x00 / 0x4)
|
#define MIPI_CAL_MIPI_CAL_CTRL (0x00 / 0x4)
|
||||||
|
@ -500,7 +504,7 @@
|
||||||
|
|
||||||
/* Switch Panels:
|
/* Switch Panels:
|
||||||
*
|
*
|
||||||
* 6.2 panels":
|
* 6.2" panels for Icosa and Iowa skus:
|
||||||
* [10] 81 [26]: JDI LPM062M326A
|
* [10] 81 [26]: JDI LPM062M326A
|
||||||
* [10] 96 [09]: JDI LAM062M109A
|
* [10] 96 [09]: JDI LAM062M109A
|
||||||
* [20] 93 [0F]: InnoLux P062CCA-AZ1 (Rev A1)
|
* [20] 93 [0F]: InnoLux P062CCA-AZ1 (Rev A1)
|
||||||
|
@ -508,11 +512,27 @@
|
||||||
* [30] 94 [0F]: AUO A062TAN01 (59.06A33.001)
|
* [30] 94 [0F]: AUO A062TAN01 (59.06A33.001)
|
||||||
* [30] 95 [0F]: AUO A062TAN02 (59.06A33.002)
|
* [30] 95 [0F]: AUO A062TAN02 (59.06A33.002)
|
||||||
*
|
*
|
||||||
* 5.5" panels:
|
* 5.5" panels for Hoag skus:
|
||||||
* [20] 94 [10]: InnoLux 2J055IA-27A (Rev B1)
|
* [20] 94 [10]: InnoLux 2J055IA-27A (Rev B1)
|
||||||
* [30] XX [10]: AUO A055TAN01 (59.05A30.001) [UNCONFIRMED ID]
|
* [30] XX [10]: AUO A055TAN01 (59.05A30.001) [UNCONFIRMED ID]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* Display ID Decoding:
|
||||||
|
*
|
||||||
|
* byte0: Vendor
|
||||||
|
* byte1: Model
|
||||||
|
* byte2: Board
|
||||||
|
*
|
||||||
|
* Vendors:
|
||||||
|
* 10h: Japan Display Inc.
|
||||||
|
* 20h: InnoLux Corporation
|
||||||
|
* 30h: AU Optronics
|
||||||
|
*
|
||||||
|
* Boards, Panel Size:
|
||||||
|
* 0Fh: Icosa/Iowa, 6.2"
|
||||||
|
* 10h: Hoag, 5.5"
|
||||||
|
*/
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
PANEL_JDI_XXX062M = 0x10,
|
PANEL_JDI_XXX062M = 0x10,
|
||||||
|
|
115
bdk/gfx/di.inl
115
bdk/gfx/di.inl
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018 naehrwert
|
* Copyright (c) 2018 naehrwert
|
||||||
* Copyright (c) 2018-2019 CTCaer
|
* Copyright (c) 2018-2020 CTCaer
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
@ -20,7 +20,7 @@ static const cfg_op_t _display_dc_setup_win_config[94] = {
|
||||||
{DC_CMD_STATE_ACCESS, 0},
|
{DC_CMD_STATE_ACCESS, 0},
|
||||||
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE},
|
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE},
|
||||||
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ},
|
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ},
|
||||||
{DC_CMD_REG_ACT_CONTROL, 0x54},
|
{DC_CMD_REG_ACT_CONTROL, 0x54}, // Select H counter for win A/B/C.
|
||||||
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE},
|
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE},
|
||||||
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ},
|
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ},
|
||||||
{DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
{DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
||||||
|
@ -101,11 +101,11 @@ static const cfg_op_t _display_dc_setup_win_config[94] = {
|
||||||
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE | WIN_A_UPDATE | WIN_B_UPDATE | WIN_C_UPDATE},
|
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE | WIN_A_UPDATE | WIN_B_UPDATE | WIN_C_UPDATE},
|
||||||
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ | WIN_A_ACT_REQ | WIN_B_ACT_REQ | WIN_C_ACT_REQ},
|
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ | WIN_A_ACT_REQ | WIN_B_ACT_REQ | WIN_C_ACT_REQ},
|
||||||
{DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
{DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
||||||
{0x716, 0x10000FF},
|
{DC_WINBUF_BLEND_LAYER_CONTROL, 0x10000FF},
|
||||||
{DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT},
|
{DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT},
|
||||||
{0x716, 0x10000FF},
|
{DC_WINBUF_BLEND_LAYER_CONTROL, 0x10000FF},
|
||||||
{DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT},
|
{DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT},
|
||||||
{0x716, 0x10000FF},
|
{DC_WINBUF_BLEND_LAYER_CONTROL, 0x10000FF},
|
||||||
{DC_CMD_DISPLAY_COMMAND_OPTION0, 0},
|
{DC_CMD_DISPLAY_COMMAND_OPTION0, 0},
|
||||||
{DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
{DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
||||||
{DC_WIN_WIN_OPTIONS, 0},
|
{DC_WIN_WIN_OPTIONS, 0},
|
||||||
|
@ -120,7 +120,7 @@ static const cfg_op_t _display_dc_setup_win_config[94] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
//DSI Init config.
|
//DSI Init config.
|
||||||
static const cfg_op_t _display_dsi_init_config[61] = {
|
static const cfg_op_t _display_dsi_init_config_part1[8] = {
|
||||||
{DSI_WR_DATA, 0},
|
{DSI_WR_DATA, 0},
|
||||||
{DSI_INT_ENABLE, 0},
|
{DSI_INT_ENABLE, 0},
|
||||||
{DSI_INT_STATUS, 0},
|
{DSI_INT_STATUS, 0},
|
||||||
|
@ -128,8 +128,9 @@ static const cfg_op_t _display_dsi_init_config[61] = {
|
||||||
{DSI_INIT_SEQ_DATA_0, 0},
|
{DSI_INIT_SEQ_DATA_0, 0},
|
||||||
{DSI_INIT_SEQ_DATA_1, 0},
|
{DSI_INIT_SEQ_DATA_1, 0},
|
||||||
{DSI_INIT_SEQ_DATA_2, 0},
|
{DSI_INIT_SEQ_DATA_2, 0},
|
||||||
{DSI_INIT_SEQ_DATA_3, 0},
|
{DSI_INIT_SEQ_DATA_3, 0}
|
||||||
{DSI_INIT_SEQ_DATA_15, 0},
|
};
|
||||||
|
static const cfg_op_t _display_dsi_init_config_part2[14] = {
|
||||||
{DSI_DCS_CMDS, 0},
|
{DSI_DCS_CMDS, 0},
|
||||||
{DSI_PKT_SEQ_0_LO, 0},
|
{DSI_PKT_SEQ_0_LO, 0},
|
||||||
{DSI_PKT_SEQ_1_LO, 0},
|
{DSI_PKT_SEQ_1_LO, 0},
|
||||||
|
@ -143,7 +144,18 @@ static const cfg_op_t _display_dsi_init_config[61] = {
|
||||||
{DSI_PKT_SEQ_3_HI, 0},
|
{DSI_PKT_SEQ_3_HI, 0},
|
||||||
{DSI_PKT_SEQ_4_HI, 0},
|
{DSI_PKT_SEQ_4_HI, 0},
|
||||||
{DSI_PKT_SEQ_5_HI, 0},
|
{DSI_PKT_SEQ_5_HI, 0},
|
||||||
{DSI_CONTROL, 0},
|
{DSI_CONTROL, 0}
|
||||||
|
};
|
||||||
|
static const cfg_op_t _display_dsi_init_config_part3_t210b01[7] = {
|
||||||
|
{DSI_PAD_CONTROL_1, 0},
|
||||||
|
{DSI_PAD_CONTROL_2, 0},
|
||||||
|
{DSI_PAD_CONTROL_3, 0},
|
||||||
|
{DSI_PAD_CONTROL_4, 0},
|
||||||
|
{DSI_PAD_CONTROL_5_B01, 0},
|
||||||
|
{DSI_PAD_CONTROL_6_B01, 0},
|
||||||
|
{DSI_PAD_CONTROL_7_B01, 0}
|
||||||
|
};
|
||||||
|
static const cfg_op_t _display_dsi_init_config_part4[10] = {
|
||||||
{DSI_PAD_CONTROL_CD, 0},
|
{DSI_PAD_CONTROL_CD, 0},
|
||||||
{DSI_SOL_DELAY, 0x18},
|
{DSI_SOL_DELAY, 0x18},
|
||||||
{DSI_MAX_THRESHOLD, 0x1E0},
|
{DSI_MAX_THRESHOLD, 0x1E0},
|
||||||
|
@ -153,8 +165,9 @@ static const cfg_op_t _display_dsi_init_config[61] = {
|
||||||
{DSI_PKT_LEN_2_3, 0},
|
{DSI_PKT_LEN_2_3, 0},
|
||||||
{DSI_PKT_LEN_4_5, 0},
|
{DSI_PKT_LEN_4_5, 0},
|
||||||
{DSI_PKT_LEN_6_7, 0},
|
{DSI_PKT_LEN_6_7, 0},
|
||||||
{DSI_PAD_CONTROL_1, 0},
|
{DSI_PAD_CONTROL_1, 0}
|
||||||
{DSI_PHY_TIMING_0, 0x6070601},
|
};
|
||||||
|
static const cfg_op_t _display_dsi_init_config_part5[12] = {
|
||||||
{DSI_PHY_TIMING_1, 0x40A0E05},
|
{DSI_PHY_TIMING_1, 0x40A0E05},
|
||||||
{DSI_PHY_TIMING_2, 0x30109},
|
{DSI_PHY_TIMING_2, 0x30109},
|
||||||
{DSI_BTA_TIMING, 0x190A14},
|
{DSI_BTA_TIMING, 0x190A14},
|
||||||
|
@ -166,8 +179,9 @@ static const cfg_op_t _display_dsi_init_config[61] = {
|
||||||
{DSI_POWER_CONTROL, DSI_POWER_CONTROL_ENABLE},
|
{DSI_POWER_CONTROL, DSI_POWER_CONTROL_ENABLE},
|
||||||
{DSI_POWER_CONTROL, 0},
|
{DSI_POWER_CONTROL, 0},
|
||||||
{DSI_POWER_CONTROL, 0},
|
{DSI_POWER_CONTROL, 0},
|
||||||
{DSI_PAD_CONTROL_1, 0},
|
{DSI_PAD_CONTROL_1, 0}
|
||||||
{DSI_PHY_TIMING_0, 0x6070601},
|
};
|
||||||
|
static const cfg_op_t _display_dsi_init_config_part6[14] = {
|
||||||
{DSI_PHY_TIMING_1, 0x40A0E05},
|
{DSI_PHY_TIMING_1, 0x40A0E05},
|
||||||
{DSI_PHY_TIMING_2, 0x30118},
|
{DSI_PHY_TIMING_2, 0x30118},
|
||||||
{DSI_BTA_TIMING, 0x190A14},
|
{DSI_BTA_TIMING, 0x190A14},
|
||||||
|
@ -187,12 +201,12 @@ static const cfg_op_t _display_dsi_init_config[61] = {
|
||||||
//DSI panel config.
|
//DSI panel config.
|
||||||
static const cfg_op_t _display_init_config_jdi[43] = {
|
static const cfg_op_t _display_init_config_jdi[43] = {
|
||||||
{DSI_WR_DATA, 0x439}, // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
|
{DSI_WR_DATA, 0x439}, // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
|
||||||
{DSI_WR_DATA, 0x9483FFB9}, // Enable extension cmd. (Pass: FF 83 94).
|
{DSI_WR_DATA, 0x9483FFB9}, // MIPI_DCS_PRIV_SET_EXTC. (Pass: FF 83 94).
|
||||||
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
||||||
{DSI_WR_DATA, 0x00BD15}, // MIPI_DSI_DCS_SHORT_WRITE_PARAM: 0x0BD.
|
{DSI_WR_DATA, 0x00BD15}, // MIPI_DSI_DCS_SHORT_WRITE_PARAM: 0 to 0xBD.
|
||||||
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
||||||
{DSI_WR_DATA, 0x1939}, // MIPI_DSI_DCS_LONG_WRITE: 25 bytes.
|
{DSI_WR_DATA, 0x1939}, // MIPI_DSI_DCS_LONG_WRITE: 25 bytes.
|
||||||
{DSI_WR_DATA, 0xAAAAAAD8},
|
{DSI_WR_DATA, 0xAAAAAAD8}, // Register: 0xD8.
|
||||||
{DSI_WR_DATA, 0xAAAAAAEB},
|
{DSI_WR_DATA, 0xAAAAAAEB},
|
||||||
{DSI_WR_DATA, 0xAAEBAAAA},
|
{DSI_WR_DATA, 0xAAEBAAAA},
|
||||||
{DSI_WR_DATA, 0xAAAAAAAA},
|
{DSI_WR_DATA, 0xAAAAAAAA},
|
||||||
|
@ -200,10 +214,10 @@ static const cfg_op_t _display_init_config_jdi[43] = {
|
||||||
{DSI_WR_DATA, 0xAAEBAAAA},
|
{DSI_WR_DATA, 0xAAEBAAAA},
|
||||||
{DSI_WR_DATA, 0xAA},
|
{DSI_WR_DATA, 0xAA},
|
||||||
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
||||||
{DSI_WR_DATA, 0x01BD15}, // MIPI_DSI_DCS_SHORT_WRITE_PARAM: 0x1BD.
|
{DSI_WR_DATA, 0x01BD15}, // MIPI_DSI_DCS_SHORT_WRITE_PARAM: 1 to 0xBD.
|
||||||
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
||||||
{DSI_WR_DATA, 0x2739}, // MIPI_DSI_DCS_LONG_WRITE: 39 bytes.
|
{DSI_WR_DATA, 0x2739}, // MIPI_DSI_DCS_LONG_WRITE: 39 bytes.
|
||||||
{DSI_WR_DATA, 0xFFFFFFD8},
|
{DSI_WR_DATA, 0xFFFFFFD8}, // Register: 0xD8.
|
||||||
{DSI_WR_DATA, 0xFFFFFFFF},
|
{DSI_WR_DATA, 0xFFFFFFFF},
|
||||||
{DSI_WR_DATA, 0xFFFFFFFF},
|
{DSI_WR_DATA, 0xFFFFFFFF},
|
||||||
{DSI_WR_DATA, 0xFFFFFFFF},
|
{DSI_WR_DATA, 0xFFFFFFFF},
|
||||||
|
@ -214,27 +228,25 @@ static const cfg_op_t _display_init_config_jdi[43] = {
|
||||||
{DSI_WR_DATA, 0xFFFFFFFF},
|
{DSI_WR_DATA, 0xFFFFFFFF},
|
||||||
{DSI_WR_DATA, 0xFFFFFF},
|
{DSI_WR_DATA, 0xFFFFFF},
|
||||||
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
||||||
{DSI_WR_DATA, 0x02BD15}, // MIPI_DSI_DCS_SHORT_WRITE_PARAM: 0x2BD.
|
{DSI_WR_DATA, 0x02BD15}, // MIPI_DSI_DCS_SHORT_WRITE_PARAM: 2 to 0xBD.
|
||||||
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
||||||
{DSI_WR_DATA, 0xF39}, // MIPI_DSI_DCS_LONG_WRITE: 15 bytes.
|
{DSI_WR_DATA, 0xF39}, // MIPI_DSI_DCS_LONG_WRITE: 15 bytes.
|
||||||
{DSI_WR_DATA, 0xFFFFFFD8},
|
{DSI_WR_DATA, 0xFFFFFFD8}, // Register: 0xD8.
|
||||||
{DSI_WR_DATA, 0xFFFFFFFF},
|
{DSI_WR_DATA, 0xFFFFFFFF},
|
||||||
{DSI_WR_DATA, 0xFFFFFFFF},
|
{DSI_WR_DATA, 0xFFFFFFFF},
|
||||||
{DSI_WR_DATA, 0xFFFFFF},
|
{DSI_WR_DATA, 0xFFFFFF},
|
||||||
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
||||||
{DSI_WR_DATA, 0x00BD15}, // MIPI_DSI_DCS_SHORT_WRITE_PARAM: 0x0BD.
|
{DSI_WR_DATA, 0x00BD15}, // MIPI_DSI_DCS_SHORT_WRITE_PARAM: 0 to 0xBD.
|
||||||
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
||||||
{DSI_WR_DATA, 0x06D915}, // MIPI_DSI_DCS_SHORT_WRITE_PARAM: 0x6D9.
|
{DSI_WR_DATA, 0x06D915}, // MIPI_DSI_DCS_SHORT_WRITE_PARAM: 6 to 0xD9.
|
||||||
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
||||||
{DSI_WR_DATA, 0x439}, // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
|
{DSI_WR_DATA, 0x439}, // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
|
||||||
{DSI_WR_DATA, 0x000000B9}, // Disable extension cmd.
|
{DSI_WR_DATA, 0x000000B9}, // MIPI_DCS_PRIV_SET_EXTC. Disable.
|
||||||
{DSI_TRIGGER, DSI_TRIGGER_HOST}
|
{DSI_TRIGGER, DSI_TRIGGER_HOST}
|
||||||
};
|
};
|
||||||
|
|
||||||
//DSI packet config.
|
//DSI packet config.
|
||||||
static const cfg_op_t _display_dsi_packet_config[21] = {
|
static const cfg_op_t _display_dsi_packet_config[19] = {
|
||||||
{DSI_PAD_CONTROL_1, 0},
|
|
||||||
{DSI_PHY_TIMING_0, 0x6070601},
|
|
||||||
{DSI_PHY_TIMING_1, 0x40A0E05},
|
{DSI_PHY_TIMING_1, 0x40A0E05},
|
||||||
{DSI_PHY_TIMING_2, 0x30172},
|
{DSI_PHY_TIMING_2, 0x30172},
|
||||||
{DSI_BTA_TIMING, 0x190A14},
|
{DSI_BTA_TIMING, 0x190A14},
|
||||||
|
@ -271,29 +283,44 @@ static const cfg_op_t _display_dsi_mode_config[10] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
//MIPI CAL config.
|
//MIPI CAL config.
|
||||||
static const cfg_op_t _display_mipi_pad_cal_config[6] = {
|
static const cfg_op_t _display_mipi_pad_cal_config[4] = {
|
||||||
{MIPI_CAL_MIPI_BIAS_PAD_CFG2, 0},
|
{MIPI_CAL_MIPI_BIAS_PAD_CFG2, 0},
|
||||||
{MIPI_CAL_CIL_MIPI_CAL_STATUS, 0xF3F10000},
|
{MIPI_CAL_CIL_MIPI_CAL_STATUS, 0xF3F10000},
|
||||||
{MIPI_CAL_MIPI_BIAS_PAD_CFG0, 0},
|
{MIPI_CAL_MIPI_BIAS_PAD_CFG0, 0},
|
||||||
{MIPI_CAL_MIPI_BIAS_PAD_CFG2, 0},
|
{MIPI_CAL_MIPI_BIAS_PAD_CFG2, 0}
|
||||||
{MIPI_CAL_MIPI_BIAS_PAD_CFG2, 0x10010},
|
|
||||||
{MIPI_CAL_MIPI_BIAS_PAD_CFG1, 0x300}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//DSI config.
|
//DSI config.
|
||||||
static const cfg_op_t _display_dsi_pad_cal_config[4] = {
|
static const cfg_op_t _display_dsi_pad_cal_config_t210[4] = {
|
||||||
{DSI_PAD_CONTROL_1, 0},
|
{DSI_PAD_CONTROL_1, 0},
|
||||||
{DSI_PAD_CONTROL_2, 0},
|
{DSI_PAD_CONTROL_2, 0},
|
||||||
{DSI_PAD_CONTROL_3, DSI_PAD_PREEMP_PD_CLK(0x3) | DSI_PAD_PREEMP_PU_CLK(0x3) | DSI_PAD_PREEMP_PD(0x03) | DSI_PAD_PREEMP_PU(0x3)},
|
{DSI_PAD_CONTROL_3, DSI_PAD_PREEMP_PD_CLK(0x3) | DSI_PAD_PREEMP_PU_CLK(0x3) | DSI_PAD_PREEMP_PD(0x03) | DSI_PAD_PREEMP_PU(0x3)},
|
||||||
{DSI_PAD_CONTROL_4, 0}
|
{DSI_PAD_CONTROL_4, 0}
|
||||||
};
|
};
|
||||||
|
static const cfg_op_t _display_dsi_pad_cal_config_t210b01[7] = {
|
||||||
|
{DSI_PAD_CONTROL_1, 0},
|
||||||
|
{DSI_PAD_CONTROL_2, 0},
|
||||||
|
{DSI_PAD_CONTROL_3, 0},
|
||||||
|
{DSI_PAD_CONTROL_4, 0x77777},
|
||||||
|
{DSI_PAD_CONTROL_5_B01, 0x77777},
|
||||||
|
{DSI_PAD_CONTROL_6_B01, 0x1111},
|
||||||
|
{DSI_PAD_CONTROL_7_B01, 0}
|
||||||
|
};
|
||||||
|
|
||||||
//MIPI CAL config.
|
//MIPI CAL config.
|
||||||
static const cfg_op_t _display_mipi_apply_dsi_cal_config[16] = {
|
static const cfg_op_t _display_mipi_dsi_cal_offsets_config_t210[4] = {
|
||||||
{MIPI_CAL_DSIA_MIPI_CAL_CONFIG, 0x200200},
|
{MIPI_CAL_DSIA_MIPI_CAL_CONFIG, 0x200200},
|
||||||
{MIPI_CAL_DSIB_MIPI_CAL_CONFIG, 0x200200},
|
{MIPI_CAL_DSIB_MIPI_CAL_CONFIG, 0x200200},
|
||||||
{MIPI_CAL_DSIA_MIPI_CAL_CONFIG_2, 0x200002},
|
{MIPI_CAL_DSIA_MIPI_CAL_CONFIG_2, 0x200002},
|
||||||
{MIPI_CAL_DSIB_MIPI_CAL_CONFIG_2, 0x200002},
|
{MIPI_CAL_DSIB_MIPI_CAL_CONFIG_2, 0x200002}
|
||||||
|
};
|
||||||
|
static const cfg_op_t _display_mipi_dsi_cal_offsets_config_t210b01[4] = {
|
||||||
|
{MIPI_CAL_DSIA_MIPI_CAL_CONFIG, 0x200006},
|
||||||
|
{MIPI_CAL_DSIB_MIPI_CAL_CONFIG, 0x200006},
|
||||||
|
{MIPI_CAL_DSIA_MIPI_CAL_CONFIG_2, 0x260000},
|
||||||
|
{MIPI_CAL_DSIB_MIPI_CAL_CONFIG_2, 0x260000}
|
||||||
|
};
|
||||||
|
static const cfg_op_t _display_mipi_apply_dsi_cal_config[12] = {
|
||||||
{MIPI_CAL_CILA_MIPI_CAL_CONFIG, 0},
|
{MIPI_CAL_CILA_MIPI_CAL_CONFIG, 0},
|
||||||
{MIPI_CAL_CILB_MIPI_CAL_CONFIG, 0},
|
{MIPI_CAL_CILB_MIPI_CAL_CONFIG, 0},
|
||||||
{MIPI_CAL_CILC_MIPI_CAL_CONFIG, 0},
|
{MIPI_CAL_CILC_MIPI_CAL_CONFIG, 0},
|
||||||
|
@ -500,10 +527,10 @@ static const cfg_op_t _display_dsi_timing_deinit_config[16] = {
|
||||||
//DSI config (if ver == 0x10).
|
//DSI config (if ver == 0x10).
|
||||||
static const cfg_op_t _display_deinit_config_jdi[22] = {
|
static const cfg_op_t _display_deinit_config_jdi[22] = {
|
||||||
{DSI_WR_DATA, 0x439}, // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
|
{DSI_WR_DATA, 0x439}, // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
|
||||||
{DSI_WR_DATA, 0x9483FFB9}, // Enable extension cmd. (Pass: FF 83 94).
|
{DSI_WR_DATA, 0x9483FFB9}, // MIPI_DCS_PRIV_SET_EXTC. (Pass: FF 83 94).
|
||||||
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
||||||
{DSI_WR_DATA, 0x2139}, // MIPI_DSI_DCS_LONG_WRITE: 33 bytes.
|
{DSI_WR_DATA, 0x2139}, // MIPI_DSI_DCS_LONG_WRITE: 33 bytes.
|
||||||
{DSI_WR_DATA, 0x191919D5},
|
{DSI_WR_DATA, 0x191919D5}, // Register: 0xD5.
|
||||||
{DSI_WR_DATA, 0x19191919},
|
{DSI_WR_DATA, 0x19191919},
|
||||||
{DSI_WR_DATA, 0x19191919},
|
{DSI_WR_DATA, 0x19191919},
|
||||||
{DSI_WR_DATA, 0x19191919},
|
{DSI_WR_DATA, 0x19191919},
|
||||||
|
@ -514,21 +541,21 @@ static const cfg_op_t _display_deinit_config_jdi[22] = {
|
||||||
{DSI_WR_DATA, 0x19},
|
{DSI_WR_DATA, 0x19},
|
||||||
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
||||||
{DSI_WR_DATA, 0xB39}, // MIPI_DSI_DCS_LONG_WRITE: 11 bytes.
|
{DSI_WR_DATA, 0xB39}, // MIPI_DSI_DCS_LONG_WRITE: 11 bytes.
|
||||||
{DSI_WR_DATA, 0x4F0F41B1}, // Set Power control.
|
{DSI_WR_DATA, 0x4F0F41B1}, // MIPI_DCS_PRIV_SET_POWER_CONTROL.
|
||||||
{DSI_WR_DATA, 0xF179A433},
|
{DSI_WR_DATA, 0xF179A433},
|
||||||
{DSI_WR_DATA, 0x002D81},
|
{DSI_WR_DATA, 0x002D81},
|
||||||
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
||||||
{DSI_WR_DATA, 0x439}, // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
|
{DSI_WR_DATA, 0x439}, // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
|
||||||
{DSI_WR_DATA, 0x000000B9}, // Disable extension cmd.
|
{DSI_WR_DATA, 0x000000B9}, // MIPI_DCS_PRIV_SET_EXTC. Disable.
|
||||||
{DSI_TRIGGER, DSI_TRIGGER_HOST}
|
{DSI_TRIGGER, DSI_TRIGGER_HOST}
|
||||||
};
|
};
|
||||||
|
|
||||||
static const cfg_op_t _display_deinit_config_auo[37] = {
|
static const cfg_op_t _display_deinit_config_auo[37] = {
|
||||||
{DSI_WR_DATA, 0x439}, // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
|
{DSI_WR_DATA, 0x439}, // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
|
||||||
{DSI_WR_DATA, 0x9483FFB9}, // Enable extension cmd. (Pass: FF 83 94).
|
{DSI_WR_DATA, 0x9483FFB9}, // MIPI_DCS_PRIV_SET_EXTC. (Pass: FF 83 94).
|
||||||
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
||||||
{DSI_WR_DATA, 0x2C39}, // MIPI_DSI_DCS_LONG_WRITE: 44 bytes.
|
{DSI_WR_DATA, 0x2C39}, // MIPI_DSI_DCS_LONG_WRITE: 44 bytes.
|
||||||
{DSI_WR_DATA, 0x191919D5},
|
{DSI_WR_DATA, 0x191919D5}, // Register: 0xD5.
|
||||||
{DSI_WR_DATA, 0x19191919},
|
{DSI_WR_DATA, 0x19191919},
|
||||||
{DSI_WR_DATA, 0x19191919},
|
{DSI_WR_DATA, 0x19191919},
|
||||||
{DSI_WR_DATA, 0x19191919},
|
{DSI_WR_DATA, 0x19191919},
|
||||||
|
@ -541,7 +568,7 @@ static const cfg_op_t _display_deinit_config_auo[37] = {
|
||||||
{DSI_WR_DATA, 0x19191919},
|
{DSI_WR_DATA, 0x19191919},
|
||||||
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
||||||
{DSI_WR_DATA, 0x2C39}, // MIPI_DSI_DCS_LONG_WRITE: 44 bytes.
|
{DSI_WR_DATA, 0x2C39}, // MIPI_DSI_DCS_LONG_WRITE: 44 bytes.
|
||||||
{DSI_WR_DATA, 0x191919D6},
|
{DSI_WR_DATA, 0x191919D6}, // Register: 0xD6.
|
||||||
{DSI_WR_DATA, 0x19191919},
|
{DSI_WR_DATA, 0x19191919},
|
||||||
{DSI_WR_DATA, 0x19191919},
|
{DSI_WR_DATA, 0x19191919},
|
||||||
{DSI_WR_DATA, 0x19191919},
|
{DSI_WR_DATA, 0x19191919},
|
||||||
|
@ -554,13 +581,13 @@ static const cfg_op_t _display_deinit_config_auo[37] = {
|
||||||
{DSI_WR_DATA, 0x19191919},
|
{DSI_WR_DATA, 0x19191919},
|
||||||
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
||||||
{DSI_WR_DATA, 0xB39}, // MIPI_DSI_DCS_LONG_WRITE: 11 bytes.
|
{DSI_WR_DATA, 0xB39}, // MIPI_DSI_DCS_LONG_WRITE: 11 bytes.
|
||||||
{DSI_WR_DATA, 0x711148B1}, // Set Power control. (Not deep standby, BT1 / XDK, VRH gamma volt adj 49 / x40).
|
{DSI_WR_DATA, 0x711148B1}, // MIPI_DCS_PRIV_SET_POWER_CONTROL. (Not deep standby, BT1 / XDK, VRH gamma volt adj 49 / x40).
|
||||||
// Set Power control. (NVRH gamma volt adj 9, Amplifier current small / x30, FS0 freq Fosc/80 / FS1 freq Fosc/32, Enter standby / PON / VCOMG).
|
// (NVRH gamma volt adj 9, Amplifier current small / x30, FS0 freq Fosc/80 / FS1 freq Fosc/32, Enter standby / PON / VCOMG).
|
||||||
{DSI_WR_DATA, 0x71143209},
|
{DSI_WR_DATA, 0x71143209},
|
||||||
{DSI_WR_DATA, 0x114D31}, // Set Power control. (Unknown).
|
{DSI_WR_DATA, 0x114D31}, // (Unknown).
|
||||||
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
{DSI_TRIGGER, DSI_TRIGGER_HOST},
|
||||||
{DSI_WR_DATA, 0x439}, // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
|
{DSI_WR_DATA, 0x439}, // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
|
||||||
{DSI_WR_DATA, 0x000000B9}, // Disable extension cmd.
|
{DSI_WR_DATA, 0x000000B9}, // MIPI_DCS_PRIV_SET_EXTC. Disable.
|
||||||
{DSI_TRIGGER, DSI_TRIGGER_HOST}
|
{DSI_TRIGGER, DSI_TRIGGER_HOST}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -189,6 +189,7 @@
|
||||||
#define APB_MISC_GP_EMMC2_PAD_CFGPADCTRL 0xA9C
|
#define APB_MISC_GP_EMMC2_PAD_CFGPADCTRL 0xA9C
|
||||||
#define APB_MISC_GP_EMMC4_PAD_CFGPADCTRL 0xAB4
|
#define APB_MISC_GP_EMMC4_PAD_CFGPADCTRL 0xAB4
|
||||||
#define APB_MISC_GP_EMMC4_PAD_PUPD_CFGPADCTRL 0xABC
|
#define APB_MISC_GP_EMMC4_PAD_PUPD_CFGPADCTRL 0xABC
|
||||||
|
#define APB_MISC_GP_DSI_PAD_CONTROL 0xAC0
|
||||||
#define APB_MISC_GP_WIFI_EN_CFGPADCTRL 0xB64
|
#define APB_MISC_GP_WIFI_EN_CFGPADCTRL 0xB64
|
||||||
#define APB_MISC_GP_WIFI_RST_CFGPADCTRL 0xB68
|
#define APB_MISC_GP_WIFI_RST_CFGPADCTRL 0xB68
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue