From ba604b558e3a4e9e53c948391bc86a7bc775e6b3 Mon Sep 17 00:00:00 2001 From: Yidi Lin Date: Wed, 3 Jan 2024 16:07:24 +0800 Subject: soc/mediatek: Add common implementation to configure display The sequences of configure_display() are similar on MediaTek platforms. The sequences usually involve following steps: 1. Setup mtcmos for display hardware block. - mtcmos_display_power_on() - mtcmos_protect_display_bus() 2. Configure backlight pins 3. Power on the panel - It also powers on the bridge in MIPI DSI to eDP case. 4. General initialization for DDP(display data path) 5. Initialize eDP/MIPI DSI accordingly, - For eDP path, it calls mtk_edp_init() to get edid from the panel and initializes eDP driver. - For MIPI DSI path, the edid is retrieved either from the bridge or from CBFS (the serializable data), and then initializes DSI driver. 6. Set framebuffer bits per pixel 7. Setup DDP mode 8. Setup panel orientation This patch extracts geralt/display.c to mediatek/common/display.c and refactors `struct panel_description` to generalize the display init sequences. configure_display() is also renamed to mtk_display_init(). TEST=check FW screen on geralt. Change-Id: I403bba8a826de5f3fb2ea96a5403725ff194164f Signed-off-by: Yidi Lin Reviewed-on: https://review.coreboot.org/c/coreboot/+/79776 Reviewed-by: Yu-Ping Wu Tested-by: build bot (Jenkins) --- src/mainboard/google/geralt/panel.c | 52 +------------------------------------ 1 file changed, 1 insertion(+), 51 deletions(-) (limited to 'src/mainboard/google/geralt/panel.c') diff --git a/src/mainboard/google/geralt/panel.c b/src/mainboard/google/geralt/panel.c index e25b5cbedd..202eda7b7d 100644 --- a/src/mainboard/google/geralt/panel.c +++ b/src/mainboard/google/geralt/panel.c @@ -12,30 +12,6 @@ #include "gpio.h" #include "panel.h" -static void get_mipi_cmd_from_cbfs(struct panel_description *desc) -{ - /* - * The CBFS file name is panel-{MANUFACTURER}-${PANEL_NAME}, where MANUFACTURER is 3 - * characters and PANEL_NAME is usually 13 characters. - */ - char cbfs_name[64]; - static union { - u8 raw[4 * 1024]; /* Most panels only need < 2K. */ - struct panel_serializable_data s; - } buffer; - - if (!desc->name) { - printk(BIOS_ERR, "Missing panel CBFS file name.\n"); - return; - } - - snprintf(cbfs_name, sizeof(cbfs_name), "panel-%s", desc->name); - if (cbfs_load(cbfs_name, buffer.raw, sizeof(buffer))) - desc->s = &buffer.s; - else - printk(BIOS_ERR, "Missing %s in CBFS.\n", cbfs_name); -} - struct panel_description __weak *get_panel_description(uint32_t panel_id) { printk(BIOS_WARNING, "%s: %s: the panel configuration is not ready\n", @@ -46,33 +22,7 @@ struct panel_description __weak *get_panel_description(uint32_t panel_id) struct panel_description *get_active_panel(void) { uint32_t active_panel_id = panel_id(); - - struct panel_description *panel = get_panel_description(active_panel_id); - if (!panel || panel->disp_path == DISP_PATH_NONE) { - printk(BIOS_ERR, "%s: Panel %u is not supported.\n", __func__, active_panel_id); - return NULL; - } - - /* For eDP, we will get edid after eDP initialization is done, so we return directly. */ - if (panel->disp_path == DISP_PATH_EDP) { - printk(BIOS_INFO, "%s: Use eDP as the display\n", __func__); - return panel; - } - - /* We need to find init cmds for MIPI panel from CBFS */ - get_mipi_cmd_from_cbfs(panel); - if (!panel->s) - return NULL; - - const struct edid *edid = &panel->s->edid; - const char *name = edid->ascii_string; - if (name[0] == '\0') { - name = "unknown name"; - printk(BIOS_INFO, "%s: Found ID %u: '%s %s' %dx%d@%dHz\n", __func__, - active_panel_id, edid->manufacturer_name, name, edid->mode.ha, - edid->mode.va, edid->mode.refresh); - } - return panel; + return get_panel_description(active_panel_id); } void configure_mipi_pwm_backlight(void) -- cgit v1.2.3