mb/google/cherry: enable display support
To enable display, we have to: 1. Configure panel power and backlight 2. Configure eDP driver BUG=b:189985956 Signed-off-by: Jitao Shi <jitao.shi@mediatek.com> Change-Id: Ida6c157a6a3bd904d3fa3dd2001385ced34f7711 Reviewed-on: https://review.coreboot.org/c/coreboot/+/55574 Reviewed-by: Yu-Ping Wu <yupingso@google.com> Reviewed-by: Hung-Te Lin <hungte@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
56126604e0
commit
f2c259cf2a
|
@ -6,10 +6,15 @@
|
|||
#include <delay.h>
|
||||
#include <device/device.h>
|
||||
#include <device/mmio.h>
|
||||
#include <edid.h>
|
||||
#include <framebuffer_info.h>
|
||||
#include <gpio.h>
|
||||
#include <soc/ddp.h>
|
||||
#include <soc/dptx.h>
|
||||
#include <soc/gpio.h>
|
||||
#include <soc/i2c.h>
|
||||
#include <soc/mt6360.h>
|
||||
#include <soc/mtcmos.h>
|
||||
#include <soc/regulator.h>
|
||||
#include <soc/spm.h>
|
||||
#include <soc/usb.h>
|
||||
|
@ -18,6 +23,12 @@
|
|||
|
||||
#include <arm-trusted-firmware/include/export/plat/mediatek/common/plat_params_exp.h>
|
||||
|
||||
/* GPIO to schematics names */
|
||||
#define GPIO_AP_EDP_BKLTEN GPIO(DGI_D5)
|
||||
#define GPIO_BL_PWM_1V8 GPIO(DISP_PWM0)
|
||||
#define GPIO_EDP_HPD_1V8 GPIO(GPIO_07)
|
||||
#define GPIO_EN_PP3300_DISP_X GPIO(I2SO1_D2)
|
||||
|
||||
DEFINE_BITFIELD(MSDC0_DRV, 29, 0)
|
||||
DEFINE_BITFIELD(MSDC1_DRV, 17, 0)
|
||||
DEFINE_BITFIELD(MSDC1_GPIO_MODE0_0, 26, 24)
|
||||
|
@ -119,8 +130,65 @@ static void configure_sdcard(void)
|
|||
mt6360_ldo_enable(MT6360_LDO5, 1);
|
||||
}
|
||||
|
||||
/* Set up backlight control pins as output pin and power-off by default */
|
||||
static void configure_panel_backlight(void)
|
||||
{
|
||||
gpio_output(GPIO_AP_EDP_BKLTEN, 0);
|
||||
gpio_output(GPIO_BL_PWM_1V8, 0);
|
||||
}
|
||||
|
||||
static void power_on_panel(void)
|
||||
{
|
||||
/* Default power sequence for most panels. */
|
||||
gpio_set_pull(GPIO_EDP_HPD_1V8, GPIO_PULL_ENABLE, GPIO_PULL_UP);
|
||||
gpio_set_mode(GPIO_EDP_HPD_1V8, 2);
|
||||
gpio_output(GPIO_EN_PP3300_DISP_X, 1);
|
||||
}
|
||||
|
||||
static bool configure_display(void)
|
||||
{
|
||||
struct edid edid;
|
||||
struct fb_info *info;
|
||||
const char *name;
|
||||
|
||||
printk(BIOS_INFO, "%s: Starting display initialization\n", __func__);
|
||||
|
||||
mtcmos_display_power_on();
|
||||
mtcmos_protect_display_bus();
|
||||
configure_panel_backlight();
|
||||
power_on_panel();
|
||||
|
||||
mtk_ddp_init();
|
||||
mdelay(200);
|
||||
|
||||
if (mtk_edp_init(&edid) < 0) {
|
||||
printk(BIOS_ERR, "%s: Failed to initialize eDP\n", __func__);
|
||||
return false;
|
||||
}
|
||||
name = edid.ascii_string;
|
||||
if (name[0] == '\0')
|
||||
name = "unknown name";
|
||||
printk(BIOS_INFO, "%s: '%s %s' %dx%d@%dHz\n", __func__,
|
||||
edid.manufacturer_name, name, edid.mode.ha, edid.mode.va,
|
||||
edid.mode.refresh);
|
||||
|
||||
edid_set_framebuffer_bits_per_pixel(&edid, 32, 0);
|
||||
|
||||
mtk_ddp_mode_set(&edid);
|
||||
info = fb_new_framebuffer_info_from_edid(&edid, (uintptr_t)0);
|
||||
if (info)
|
||||
fb_set_orientation(info, LB_FB_ORIENTATION_NORMAL);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void mainboard_init(struct device *dev)
|
||||
{
|
||||
if (display_init_required())
|
||||
configure_display();
|
||||
else
|
||||
printk(BIOS_INFO, "%s: Skipped display initialization\n", __func__);
|
||||
|
||||
configure_emmc();
|
||||
configure_sdcard();
|
||||
setup_usb_host();
|
||||
|
|
Loading…
Reference in New Issue