blob: 1cb8e47d2a642f85ebe482f688047a19e2408c49 [file] [log] [blame]
Bo-Chen Chen49465162022-11-30 14:47:41 +08001/* SPDX-License-Identifier: GPL-2.0-only */
2
3#include <boardid.h>
Bo-Chen Chenf57155b2022-12-07 19:09:57 +08004#include <boot/coreboot_tables.h>
Rex-BC Chend7b74602023-01-17 11:04:58 +08005#include <console/console.h>
6#include <delay.h>
Bo-Chen Chen49465162022-11-30 14:47:41 +08007#include <gpio.h>
8#include <soc/gpio_common.h>
Rex-BC Chend7b74602023-01-17 11:04:58 +08009#include <soc/i2c.h>
10#include <soc/regulator.h>
11#include <soc/pmif.h>
Bo-Chen Chen49465162022-11-30 14:47:41 +080012#include <string.h>
13
yangcong65384642023-03-02 20:59:30 +080014#include "display.h"
Bo-Chen Chen49465162022-11-30 14:47:41 +080015#include "gpio.h"
16#include "panel.h"
17
Rex-BC Chend7b74602023-01-17 11:04:58 +080018
Bo-Chen Chen49465162022-11-30 14:47:41 +080019static void configure_mipi_pwm_backlight(void)
20{
21 gpio_output(GPIO_AP_DISP_BKLTEN, 0);
Liju-Clr Chen26a8dea2022-12-15 13:40:41 +080022 gpio_output(GPIO_MIPI_BL_PWM_1V8, 0);
Bo-Chen Chen49465162022-11-30 14:47:41 +080023}
24
Bo-Chen Chenc07ccd92022-11-30 18:34:54 +080025static void configure_edp_aux_backlight(void)
26{
27 /* TODO: Add edp aux backlight for MUTTO_B152731E1 when we get MUTTO_B152731E1 */
28}
29
Bo-Chen Chen817c6a72023-01-10 15:59:05 +080030static void power_on_mipi_boe_tv110c9m_ll0(void)
Bo-Chen Chen49465162022-11-30 14:47:41 +080031{
yangcong65384642023-03-02 20:59:30 +080032 tps65132s_program_eeprom();
33
Rex-BC Chend7b74602023-01-17 11:04:58 +080034 /* Enable VM18V */
35 mainboard_enable_regulator(MTK_REGULATOR_VDD18, true);
36
Rex-BC Chend7b74602023-01-17 11:04:58 +080037 gpio_output(GPIO_DISP_RST_1V8_L, 0);
38 mdelay(1);
39
40 gpio_output(GPIO_EN_PPVAR_MIPI_DISP, 1);
41 gpio_output(GPIO_EN_PPVAR_MIPI_DISP_150MA, 1);
42 mdelay(10);
Rex-BC Chend7b74602023-01-17 11:04:58 +080043 gpio_output(GPIO_DISP_RST_1V8_L, 1);
44 mdelay(1);
45 gpio_output(GPIO_DISP_RST_1V8_L, 0);
46 mdelay(1);
47 gpio_output(GPIO_DISP_RST_1V8_L, 1);
48 mdelay(6);
Bo-Chen Chen49465162022-11-30 14:47:41 +080049}
50
Bo-Chen Chenc07ccd92022-11-30 18:34:54 +080051static void power_on_edp_mutto_b152731e1(void)
52{
53 /* TODO: Add the poweron for MUTTO_B152731E1 when we get MUTTO_B152731E1 */
54}
55
Bo-Chen Chen49465162022-11-30 14:47:41 +080056static struct panel_description panels[] = {
57 [1] = {
Bo-Chen Chen817c6a72023-01-10 15:59:05 +080058 .name = "BOE_TV110C9M_LL0",
59 .power_on = power_on_mipi_boe_tv110c9m_ll0,
Bo-Chen Chen49465162022-11-30 14:47:41 +080060 .configure_panel_backlight = configure_mipi_pwm_backlight,
61 .disp_path = DISP_PATH_MIPI,
Bo-Chen Chenf57155b2022-12-07 19:09:57 +080062 .pwm_ctrl_gpio = true,
Bo-Chen Chen49465162022-11-30 14:47:41 +080063 },
Bo-Chen Chenc07ccd92022-11-30 18:34:54 +080064 [11] = {
65 .name = "MUTTO_B152731E1",
66 .power_on = power_on_edp_mutto_b152731e1,
67 .configure_panel_backlight = configure_edp_aux_backlight,
68 .disp_path = DISP_PATH_EDP,
Bo-Chen Chenf57155b2022-12-07 19:09:57 +080069 .pwm_ctrl_gpio = false,
Bo-Chen Chenc07ccd92022-11-30 18:34:54 +080070 },
Bo-Chen Chen49465162022-11-30 14:47:41 +080071};
72
73struct panel_description *get_panel_description(uint32_t panel_id)
74{
Yidi Lin0b192d32023-03-20 17:40:31 +080075 /* Only PANEL_ID_LOW_CHANNEL value is valid for the reference board. */
76 uint32_t id = panel_id & 0xF;
77
78 if (id >= ARRAY_SIZE(panels))
Bo-Chen Chen49465162022-11-30 14:47:41 +080079 return NULL;
80
Yidi Lin0b192d32023-03-20 17:40:31 +080081 return &panels[id];
Bo-Chen Chen49465162022-11-30 14:47:41 +080082}
Bo-Chen Chenf57155b2022-12-07 19:09:57 +080083
84void fill_lp_backlight_gpios(struct lb_gpios *gpios)
85{
86 struct panel_description *panel = get_active_panel();
87 if (!panel || panel->disp_path == DISP_PATH_NONE)
88 return;
89
90 struct lb_gpio mipi_pwm_gpios[] = {
Liju-Clr Chen26a8dea2022-12-15 13:40:41 +080091 {GPIO_MIPI_BL_PWM_1V8.id, ACTIVE_HIGH, -1, "PWM control"},
Bo-Chen Chenf57155b2022-12-07 19:09:57 +080092 };
93
94 struct lb_gpio edp_pwm_gpios[] = {
95 {GPIO_EDP_BL_PWM_1V8.id, ACTIVE_HIGH, -1, "PWM control"},
96 };
97
98 if (panel->pwm_ctrl_gpio) {
99 /* PWM control for typical eDP and MIPI panels */
100 if (panel->disp_path == DISP_PATH_MIPI)
101 lb_add_gpios(gpios, mipi_pwm_gpios, ARRAY_SIZE(mipi_pwm_gpios));
102 else
103 lb_add_gpios(gpios, edp_pwm_gpios, ARRAY_SIZE(edp_pwm_gpios));
104 }
105
106 struct lb_gpio backlight_gpios[] = {
107 {GPIO_AP_DISP_BKLTEN.id, ACTIVE_HIGH, -1, "backlight enable"},
108 };
109
110 lb_add_gpios(gpios, backlight_gpios, ARRAY_SIZE(backlight_gpios));
111}