diff options
-rw-r--r-- | src/mainboard/google/gru/mainboard.c | 167 | ||||
-rw-r--r-- | src/soc/rockchip/rk3399/display.c | 2 | ||||
-rw-r--r-- | src/soc/rockchip/rk3399/include/soc/display.h | 3 |
3 files changed, 168 insertions, 4 deletions
diff --git a/src/mainboard/google/gru/mainboard.c b/src/mainboard/google/gru/mainboard.c index 653e49af7c..d83c486e5a 100644 --- a/src/mainboard/google/gru/mainboard.c +++ b/src/mainboard/google/gru/mainboard.c @@ -26,8 +26,10 @@ #include <soc/clock.h> #include <soc/display.h> #include <soc/grf.h> +#include <soc/mipi.h> #include <soc/i2c.h> #include <soc/usb.h> +#include <string.h> #include <vendorcode/google/chromeos/chromeos.h> #include "board.h" @@ -379,9 +381,170 @@ void mainboard_power_on_backlight(void) prepare_backlight_i2c(); } -const struct mipi_panel_data *mainboard_get_mipi_mode(struct edid *edid) +static struct panel_init_command kd097d04_init_commands[] = { + /* voltage setting */ + { 0xB0, 0x00 }, + { 0xB2, 0x02 }, + { 0xB3, 0x11 }, + { 0xB4, 0x00 }, + { 0xB6, 0x80 }, + /* VCOM disable */ + { 0xB8, 0x80 }, + { 0xBA, 0x43 }, + /* VCOM setting */ + { 0xBB, 0x53 }, + /* VSP setting */ + { 0xBC, 0x0A }, + /* VSN setting */ + { 0xBD, 0x4A }, + /* VGH setting */ + { 0xBE, 0x2F }, + /* VGL setting */ + { 0xBF, 0x1A }, + { 0xF0, 0x39 }, + { 0xF1, 0x21 }, + /* Gamma setting */ + { 0xB0, 0x02 }, + { 0xC0, 0x00 }, + { 0xC1, 0x01 }, + { 0xC2, 0x0B }, + { 0xC3, 0x15 }, + { 0xC4, 0x22 }, + { 0xC5, 0x11 }, + { 0xC6, 0x15 }, + { 0xC7, 0x19 }, + { 0xC8, 0x1A }, + { 0xC9, 0x16 }, + { 0xCA, 0x18 }, + { 0xCB, 0x13 }, + { 0xCC, 0x18 }, + { 0xCD, 0x13 }, + { 0xCE, 0x1C }, + { 0xCF, 0x19 }, + { 0xD0, 0x21 }, + { 0xD1, 0x2C }, + { 0xD2, 0x2F }, + { 0xD3, 0x30 }, + { 0xD4, 0x19 }, + { 0xD5, 0x1F }, + { 0xD6, 0x00 }, + { 0xD7, 0x01 }, + { 0xD8, 0x0B }, + { 0xD9, 0x15 }, + { 0xDA, 0x22 }, + { 0xDB, 0x11 }, + { 0xDC, 0x15 }, + { 0xDD, 0x19 }, + { 0xDE, 0x1A }, + { 0xDF, 0x16 }, + { 0xE0, 0x18 }, + { 0xE1, 0x13 }, + { 0xE2, 0x18 }, + { 0xE3, 0x13 }, + { 0xE4, 0x1C }, + { 0xE5, 0x19 }, + { 0xE6, 0x21 }, + { 0xE7, 0x2C }, + { 0xE8, 0x2F }, + { 0xE9, 0x30 }, + { 0xEA, 0x19 }, + { 0xEB, 0x1F }, + /* GOA MUX setting */ + { 0xB0, 0x01 }, + { 0xC0, 0x10 }, + { 0xC1, 0x0F }, + { 0xC2, 0x0E }, + { 0xC3, 0x0D }, + { 0xC4, 0x0C }, + { 0xC5, 0x0B }, + { 0xC6, 0x0A }, + { 0xC7, 0x09 }, + { 0xC8, 0x08 }, + { 0xC9, 0x07 }, + { 0xCA, 0x06 }, + { 0xCB, 0x05 }, + { 0xCC, 0x00 }, + { 0xCD, 0x01 }, + { 0xCE, 0x02 }, + { 0xCF, 0x03 }, + { 0xD0, 0x04 }, + { 0xD6, 0x10 }, + { 0xD7, 0x0F }, + { 0xD8, 0x0E }, + { 0xD9, 0x0D }, + { 0xDA, 0x0C }, + { 0xDB, 0x0B }, + { 0xDC, 0x0A }, + { 0xDD, 0x09 }, + { 0xDE, 0x08 }, + { 0xDF, 0x07 }, + { 0xE0, 0x06 }, + { 0xE1, 0x05 }, + { 0xE2, 0x00 }, + { 0xE3, 0x01 }, + { 0xE4, 0x02 }, + { 0xE5, 0x03 }, + { 0xE6, 0x04 }, + { 0xE7, 0x00 }, + { 0xEC, 0xC0 }, + /* GOA timing setting */ + { 0xB0, 0x03 }, + { 0xC0, 0x01 }, + { 0xC2, 0x6F }, + { 0xC3, 0x6F }, + { 0xC5, 0x36 }, + { 0xC8, 0x08 }, + { 0xC9, 0x04 }, + { 0xCA, 0x41 }, + { 0xCC, 0x43 }, + { 0xCF, 0x60 }, + { 0xD2, 0x04 }, + { 0xD3, 0x04 }, + { 0xD4, 0x03 }, + { 0xD5, 0x02 }, + { 0xD6, 0x01 }, + { 0xD7, 0x00 }, + { 0xDB, 0x01 }, + { 0xDE, 0x36 }, + { 0xE6, 0x6F }, + { 0xE7, 0x6F }, + /* GOE setting */ + { 0xB0, 0x06 }, + { 0xB8, 0xA5 }, + { 0xC0, 0xA5 }, + { 0xD5, 0x3F }, +}; + +const struct mipi_panel_data kd097d04_panel = { + .mipi_num = 2, + .format = MIPI_DSI_FMT_RGB888, + .lanes = 8, + .display_on_udelay = 120000, + .video_mode_udelay = 5000, + .init_cmd = kd097d04_init_commands, + .num_init_commands = ARRAY_SIZE(kd097d04_init_commands) +}; + +static const struct edid_mode kd097d04_edid_mode = { + .name = "1536x2048@60Hz", + .pixel_clock = 213000, + .refresh = 60, + .ha = 1536, + .hbl = 164, + .hso = 70, + .hspw = 24, + .va = 2048, + .vbl = 44, + .vso = 17, + .vspw = 2, +}; + +const struct mipi_panel_data *mainboard_get_mipi_mode + (struct edid_mode *edid_mode) { - return NULL; + memcpy(edid_mode, &kd097d04_edid_mode, sizeof(struct edid_mode)); + + return &kd097d04_panel; } static void mainboard_enable(device_t dev) diff --git a/src/soc/rockchip/rk3399/display.c b/src/soc/rockchip/rk3399/display.c index cc265b2edb..b81e96f0fe 100644 --- a/src/soc/rockchip/rk3399/display.c +++ b/src/soc/rockchip/rk3399/display.c @@ -123,7 +123,7 @@ retry_edp: write32(&rk3399_grf->soc_con20, RK_CLRBITS((1 << 0) | (1 << 4))); - panel_data = mainboard_get_mipi_mode(&edid); + panel_data = mainboard_get_mipi_mode(&edid.mode); if (panel_data) { if (panel_data->mipi_num > 1) detected_mode = VOP_MODE_DUAL_MIPI; diff --git a/src/soc/rockchip/rk3399/include/soc/display.h b/src/soc/rockchip/rk3399/include/soc/display.h index bf90f651a6..494def61d8 100644 --- a/src/soc/rockchip/rk3399/include/soc/display.h +++ b/src/soc/rockchip/rk3399/include/soc/display.h @@ -23,5 +23,6 @@ void rk_display_init(device_t dev); void mainboard_power_on_backlight(void); -const struct mipi_panel_data *mainboard_get_mipi_mode(struct edid *edid); +const struct mipi_panel_data *mainboard_get_mipi_mode + (struct edid_mode *edid_mode); #endif |