blob: 29913605065873a424518eee61eb2af2cf47fc39 [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
14#include "gpio.h"
15#include "panel.h"
16
Rex-BC Chend7b74602023-01-17 11:04:58 +080017#define PMIC_TPS65132_I2C I2C3
18#define PMIC_TPS65132_SLAVE 0x3E
19
Bo-Chen Chen49465162022-11-30 14:47:41 +080020static void configure_mipi_pwm_backlight(void)
21{
22 gpio_output(GPIO_AP_DISP_BKLTEN, 0);
Liju-Clr Chen26a8dea2022-12-15 13:40:41 +080023 gpio_output(GPIO_MIPI_BL_PWM_1V8, 0);
Bo-Chen Chen49465162022-11-30 14:47:41 +080024}
25
Bo-Chen Chenc07ccd92022-11-30 18:34:54 +080026static void configure_edp_aux_backlight(void)
27{
28 /* TODO: Add edp aux backlight for MUTTO_B152731E1 when we get MUTTO_B152731E1 */
29}
30
Bo-Chen Chen817c6a72023-01-10 15:59:05 +080031static void power_on_mipi_boe_tv110c9m_ll0(void)
Bo-Chen Chen49465162022-11-30 14:47:41 +080032{
Rex-BC Chend7b74602023-01-17 11:04:58 +080033 /* Enable VM18V */
34 mainboard_enable_regulator(MTK_REGULATOR_VDD18, true);
35
36 /* Initialize I2C3 for PMIC TPS65132 */
37 mtk_i2c_bus_init(PMIC_TPS65132_I2C, I2C_SPEED_FAST);
38 mdelay(10);
39
40 gpio_output(GPIO_DISP_RST_1V8_L, 0);
41 mdelay(1);
42
43 gpio_output(GPIO_EN_PPVAR_MIPI_DISP, 1);
44 gpio_output(GPIO_EN_PPVAR_MIPI_DISP_150MA, 1);
45 mdelay(10);
46
47 /* Set AVDD = 5.7V */
48 if (panel_pmic_reg_mask(PMIC_TPS65132_I2C, PMIC_TPS65132_SLAVE, 0x00, 0x11, 0x1F) < 0)
49 return;
50
51 /* Set AVEE = -5.7V */
52 if (panel_pmic_reg_mask(PMIC_TPS65132_I2C, PMIC_TPS65132_SLAVE, 0x01, 0x11, 0x1F) < 0)
53 return;
54
55 gpio_output(GPIO_DISP_RST_1V8_L, 1);
56 mdelay(1);
57 gpio_output(GPIO_DISP_RST_1V8_L, 0);
58 mdelay(1);
59 gpio_output(GPIO_DISP_RST_1V8_L, 1);
60 mdelay(6);
Bo-Chen Chen49465162022-11-30 14:47:41 +080061}
62
Bo-Chen Chenc07ccd92022-11-30 18:34:54 +080063static void power_on_edp_mutto_b152731e1(void)
64{
65 /* TODO: Add the poweron for MUTTO_B152731E1 when we get MUTTO_B152731E1 */
66}
67
Bo-Chen Chen49465162022-11-30 14:47:41 +080068static struct panel_description panels[] = {
69 [1] = {
Bo-Chen Chen817c6a72023-01-10 15:59:05 +080070 .name = "BOE_TV110C9M_LL0",
71 .power_on = power_on_mipi_boe_tv110c9m_ll0,
Bo-Chen Chen49465162022-11-30 14:47:41 +080072 .configure_panel_backlight = configure_mipi_pwm_backlight,
73 .disp_path = DISP_PATH_MIPI,
Bo-Chen Chenf57155b2022-12-07 19:09:57 +080074 .pwm_ctrl_gpio = true,
Bo-Chen Chen49465162022-11-30 14:47:41 +080075 },
Bo-Chen Chenc07ccd92022-11-30 18:34:54 +080076 [11] = {
77 .name = "MUTTO_B152731E1",
78 .power_on = power_on_edp_mutto_b152731e1,
79 .configure_panel_backlight = configure_edp_aux_backlight,
80 .disp_path = DISP_PATH_EDP,
Bo-Chen Chenf57155b2022-12-07 19:09:57 +080081 .pwm_ctrl_gpio = false,
Bo-Chen Chenc07ccd92022-11-30 18:34:54 +080082 },
Bo-Chen Chen49465162022-11-30 14:47:41 +080083};
84
85struct panel_description *get_panel_description(uint32_t panel_id)
86{
87 if (panel_id >= ARRAY_SIZE(panels))
88 return NULL;
89
90 return &panels[panel_id];
91}
Bo-Chen Chenf57155b2022-12-07 19:09:57 +080092
93void fill_lp_backlight_gpios(struct lb_gpios *gpios)
94{
95 struct panel_description *panel = get_active_panel();
96 if (!panel || panel->disp_path == DISP_PATH_NONE)
97 return;
98
99 struct lb_gpio mipi_pwm_gpios[] = {
Liju-Clr Chen26a8dea2022-12-15 13:40:41 +0800100 {GPIO_MIPI_BL_PWM_1V8.id, ACTIVE_HIGH, -1, "PWM control"},
Bo-Chen Chenf57155b2022-12-07 19:09:57 +0800101 };
102
103 struct lb_gpio edp_pwm_gpios[] = {
104 {GPIO_EDP_BL_PWM_1V8.id, ACTIVE_HIGH, -1, "PWM control"},
105 };
106
107 if (panel->pwm_ctrl_gpio) {
108 /* PWM control for typical eDP and MIPI panels */
109 if (panel->disp_path == DISP_PATH_MIPI)
110 lb_add_gpios(gpios, mipi_pwm_gpios, ARRAY_SIZE(mipi_pwm_gpios));
111 else
112 lb_add_gpios(gpios, edp_pwm_gpios, ARRAY_SIZE(edp_pwm_gpios));
113 }
114
115 struct lb_gpio backlight_gpios[] = {
116 {GPIO_AP_DISP_BKLTEN.id, ACTIVE_HIGH, -1, "backlight enable"},
117 };
118
119 lb_add_gpios(gpios, backlight_gpios, ARRAY_SIZE(backlight_gpios));
120}