Skip to content

Commit e7db4e2

Browse files
committed
dts: msm8916: add support for Vivo Y51L 2015 (pd1510)
1 parent c82940f commit e7db4e2

File tree

4 files changed

+306
-0
lines changed

4 files changed

+306
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// SPDX-License-Identifier: BSD-3-Clause
2+
3+
#include <skeleton64.dtsi>
4+
#include <lk2nd.dtsi>
5+
6+
/ {
7+
qcom,msm-id = <QCOM_ID_MSM8916 0>;
8+
qcom,board-id = <QCOM_BOARD_ID_MTP 0x16>;
9+
};
10+
11+
&lk2nd {
12+
model = "Vivo Y51L";
13+
compatible = "qcom,msm8916-mtp", "qcom,msm8916", "qcom,mtp";
14+
15+
lk2nd,dtb-files = "msm8916-mtp-pd1510";
16+
17+
panel {
18+
compatible = "vivo,pd1510-panel", "lk2nd,panel";
19+
20+
qcom,mdss_dsi_boeb1otm9605a_qhd_vid {
21+
compatible = "vivo,boeb1otm9605a-qhd";
22+
};
23+
qcom,mdss_dsi_boehx8389c_qHD_video {
24+
compatible = "vivo,boehx8389c-qhd";
25+
};
26+
qcom,mdss_dsi_boeotm9605a_qhd_vid_ch {
27+
compatible = "vivo,boeotm9605a-qhd-ch";
28+
};
29+
qcom,mdss_dsi_boeotm9605a_qhd_vid {
30+
compatible = "vivo,boeotm9605a-qhd";
31+
};
32+
qcom,mdss_dsi_tmotm9605a_qhd_vid_ch {
33+
compatible = "vivo,tmotm9605a-qhd";
34+
};
35+
qcom,mdss_dsi_tmotm9605a_qhd_vid {
36+
compatible = "vivo,tmotm9605a-qhd";
37+
};
38+
qcom,mdss_dsi_tryhx8389c_qHD_video_ch {
39+
compatible = "vivo,tryhx8389c-qhd-ch";
40+
};
41+
qcom,mdss_dsi_tryhx8389c_qHD_video {
42+
compatible = "vivo,tryhx8389c-qhd";
43+
};
44+
};
45+
};

lk2nd/device/dts/msm8916/rules.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ QCDTBS += \
3131
$(LOCAL_DIR)/msm8916-qrd-skut1.dtb \
3232
$(LOCAL_DIR)/msm8916-samsung.dtb \
3333
$(LOCAL_DIR)/msm8916-vivo-pd1505.dtb \
34+
$(LOCAL_DIR)/msm8916-vivo-pd1510.dtb \
3435
$(LOCAL_DIR)/msm8916-vivo-y21l.dtb \
3536
$(LOCAL_DIR)/msm8916-wiko-chuppito.dtb \
3637
$(LOCAL_DIR)/msm8929-samsung.dtb \
Lines changed: 259 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,259 @@
1+
// SPDX-License-Identifier: GPL-2.0-only
2+
// Copyright (c) 2025 FIXME
3+
// Generated with linux-mdss-dsi-panel-driver-generator from vendor device tree:
4+
// Copyright (c) 2014, The Linux Foundation. All rights reserved. (FIXME)
5+
6+
#ifndef _PANEL_BOEHX8389C_QHD_VIDEO_H_
7+
#define _PANEL_BOEHX8389C_QHD_VIDEO_H_
8+
9+
#include <mipi_dsi.h>
10+
#include <panel_display.h>
11+
#include <panel.h>
12+
#include <string.h>
13+
14+
static struct panel_config boehx8389c_qhd_video_panel_data = {
15+
.panel_node_id = "qcom,mdss_dsi_boehx8389c_qHD_video",
16+
.panel_controller = "dsi:0:",
17+
.panel_compatible = "qcom,mdss-dsi-panel",
18+
.panel_type = 0,
19+
.panel_destination = "DISPLAY_1",
20+
/* .panel_orientation not supported yet */
21+
.panel_framerate = 60,
22+
.panel_lp11_init = 1,
23+
.panel_init_delay = 10000,
24+
};
25+
26+
static struct panel_resolution boehx8389c_qhd_video_panel_res = {
27+
.panel_width = 540,
28+
.panel_height = 960,
29+
.hfront_porch = 35,
30+
.hback_porch = 90,
31+
.hpulse_width = 8,
32+
.hsync_skew = 0,
33+
.vfront_porch = 14,
34+
.vback_porch = 16,
35+
.vpulse_width = 2,
36+
/* Borders not supported yet */
37+
};
38+
39+
static struct color_info boehx8389c_qhd_video_color = {
40+
.color_format = 24,
41+
.color_order = DSI_RGB_SWAP_RGB,
42+
.underflow_color = 0xff,
43+
/* Borders and pixel packing not supported yet */
44+
};
45+
46+
static char boehx8389c_qhd_video_on_cmd_0[] = {
47+
0x04, 0x00, 0x39, 0xc0, 0xb9, 0xff, 0x83, 0x89
48+
};
49+
static char boehx8389c_qhd_video_on_cmd_1[] = {
50+
0x11, 0x00, 0x39, 0xc0, 0xb1, 0x7f, 0x0a, 0x0a,
51+
0x31, 0x51, 0x50, 0xd0, 0xec, 0x9c, 0x80, 0x20,
52+
0x20, 0xf8, 0xaa, 0xaa, 0xa3, 0xff, 0xff, 0xff
53+
};
54+
static char boehx8389c_qhd_video_on_cmd_2[] = {
55+
0x0b, 0x00, 0x39, 0xc0, 0xb2, 0x80, 0x50, 0x05,
56+
0x03, 0x50, 0x38, 0x11, 0x64, 0x55, 0x09, 0xff
57+
};
58+
static char boehx8389c_qhd_video_on_cmd_3[] = {
59+
0x0c, 0x00, 0x39, 0xc0, 0xb4, 0x77, 0x5e, 0x77,
60+
0x5e, 0x77, 0x5e, 0x0e, 0x72, 0x0e, 0x72, 0x8e
61+
};
62+
static char boehx8389c_qhd_video_on_cmd_4[] = {
63+
0x24, 0x00, 0x39, 0xc0, 0xd3, 0x00, 0x00, 0x00,
64+
0x00, 0x00, 0x08, 0x08, 0x32, 0x10, 0x00, 0x00,
65+
0x00, 0x03, 0xca, 0x03, 0xca, 0x00, 0x00, 0x00,
66+
0x00, 0x27, 0x22, 0x01, 0x01, 0x23, 0x00, 0x00,
67+
0x00, 0x05, 0x08, 0x00, 0x00, 0x0a, 0x00, 0x01
68+
};
69+
static char boehx8389c_qhd_video_on_cmd_5[] = {
70+
0x27, 0x00, 0x39, 0xc0, 0xd5, 0x18, 0x18, 0x18,
71+
0x18, 0x18, 0x18, 0x01, 0x00, 0x03, 0x02, 0x19,
72+
0x19, 0x19, 0x19, 0x21, 0x20, 0x18, 0x18, 0x18,
73+
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
74+
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
75+
0x18, 0x18, 0x18, 0xff
76+
};
77+
static char boehx8389c_qhd_video_on_cmd_6[] = {
78+
0x27, 0x00, 0x39, 0xc0, 0xd6, 0x18, 0x18, 0x18,
79+
0x18, 0x18, 0x18, 0x02, 0x03, 0x00, 0x01, 0x19,
80+
0x19, 0x18, 0x18, 0x20, 0x21, 0x19, 0x19, 0x18,
81+
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
82+
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
83+
0x18, 0x18, 0x18, 0xff
84+
};
85+
static char boehx8389c_qhd_video_on_cmd_7[] = {
86+
0x2b, 0x00, 0x39, 0xc0, 0xe0, 0x05, 0x0a, 0x0b,
87+
0x2c, 0x35, 0x3f, 0x11, 0x34, 0x04, 0x08, 0x0b,
88+
0x17, 0x0e, 0x11, 0x14, 0x13, 0x14, 0x09, 0x11,
89+
0x14, 0x17, 0x05, 0x0a, 0x0b, 0x2c, 0x35, 0x3f,
90+
0x11, 0x34, 0x04, 0x08, 0x0b, 0x17, 0x0e, 0x11,
91+
0x14, 0x13, 0x14, 0x09, 0x11, 0x14, 0x17, 0xff
92+
};
93+
static char boehx8389c_qhd_video_on_cmd_8[] = {
94+
0x03, 0x00, 0x39, 0xc0, 0xb6, 0x44, 0x44, 0xff
95+
};
96+
static char boehx8389c_qhd_video_on_cmd_9[] = {
97+
0x02, 0x00, 0x39, 0xc0, 0xbd, 0x00, 0xff, 0xff
98+
};
99+
static char boehx8389c_qhd_video_on_cmd_10[] = {
100+
0x2c, 0x00, 0x39, 0xc0, 0xc1, 0x01, 0x00, 0x08,
101+
0x10, 0x18, 0x20, 0x2a, 0x31, 0x39, 0x41, 0x49,
102+
0x51, 0x59, 0x61, 0x68, 0x6f, 0x77, 0x7e, 0x85,
103+
0x8d, 0x94, 0x9c, 0xa4, 0xad, 0xb5, 0xbc, 0xc4,
104+
0xcd, 0xd7, 0xde, 0xe6, 0xee, 0xf7, 0xff, 0x15,
105+
0xb0, 0x45, 0x28, 0x73, 0x60, 0xb4, 0x47, 0xc0
106+
};
107+
static char boehx8389c_qhd_video_on_cmd_11[] = {
108+
0x02, 0x00, 0x39, 0xc0, 0xbd, 0x01, 0xff, 0xff
109+
};
110+
static char boehx8389c_qhd_video_on_cmd_12[] = {
111+
0x2b, 0x00, 0x39, 0xc0, 0xc1, 0x00, 0x08, 0x0f,
112+
0x17, 0x1f, 0x2a, 0x30, 0x37, 0x40, 0x47, 0x4f,
113+
0x57, 0x5f, 0x66, 0x6d, 0x74, 0x7b, 0x82, 0x89,
114+
0x8f, 0x97, 0x9e, 0xa6, 0xae, 0xb5, 0xbc, 0xc3,
115+
0xcb, 0xd4, 0xdc, 0xe3, 0xea, 0xf2, 0x0e, 0x57,
116+
0x7a, 0x15, 0x03, 0x60, 0xaf, 0x86, 0x40, 0xff
117+
};
118+
static char boehx8389c_qhd_video_on_cmd_13[] = {
119+
0x02, 0x00, 0x39, 0xc0, 0xbd, 0x02, 0xff, 0xff
120+
};
121+
static char boehx8389c_qhd_video_on_cmd_14[] = {
122+
0x2b, 0x00, 0x39, 0xc0, 0xc1, 0x00, 0x08, 0x10,
123+
0x18, 0x20, 0x2b, 0x31, 0x3a, 0x43, 0x4b, 0x53,
124+
0x5c, 0x63, 0x6b, 0x72, 0x7a, 0x81, 0x88, 0x90,
125+
0x97, 0x9f, 0xa7, 0xb0, 0xb7, 0xbf, 0xc7, 0xd0,
126+
0xd8, 0xe0, 0xe7, 0xee, 0xf7, 0xff, 0x16, 0xef,
127+
0x4c, 0xd8, 0x77, 0xf7, 0x13, 0x2e, 0xc0, 0xff
128+
};
129+
static char boehx8389c_qhd_video_on_cmd_15[] = {
130+
0x02, 0x00, 0x39, 0xc0, 0xbd, 0x00, 0xff, 0xff
131+
};
132+
static char boehx8389c_qhd_video_on_cmd_16[] = {
133+
0x02, 0x00, 0x39, 0xc0, 0xd2, 0x77, 0xff, 0xff
134+
};
135+
static char boehx8389c_qhd_video_on_cmd_17[] = {
136+
0x02, 0x00, 0x39, 0xc0, 0xcc, 0x02, 0xff, 0xff
137+
};
138+
static char boehx8389c_qhd_video_on_cmd_18[] = {
139+
0x05, 0x00, 0x39, 0xc0, 0xc7, 0x00, 0x80, 0x60,
140+
0xc0, 0xff, 0xff, 0xff
141+
};
142+
static char boehx8389c_qhd_video_on_cmd_19[] = {
143+
0x11, 0x00, 0x05, 0x80
144+
};
145+
static char boehx8389c_qhd_video_on_cmd_20[] = {
146+
0x29, 0x00, 0x05, 0x80
147+
};
148+
149+
static struct mipi_dsi_cmd boehx8389c_qhd_video_on_command[] = {
150+
{ sizeof(boehx8389c_qhd_video_on_cmd_0), boehx8389c_qhd_video_on_cmd_0, 0 },
151+
{ sizeof(boehx8389c_qhd_video_on_cmd_1), boehx8389c_qhd_video_on_cmd_1, 0 },
152+
{ sizeof(boehx8389c_qhd_video_on_cmd_2), boehx8389c_qhd_video_on_cmd_2, 0 },
153+
{ sizeof(boehx8389c_qhd_video_on_cmd_3), boehx8389c_qhd_video_on_cmd_3, 0 },
154+
{ sizeof(boehx8389c_qhd_video_on_cmd_4), boehx8389c_qhd_video_on_cmd_4, 0 },
155+
{ sizeof(boehx8389c_qhd_video_on_cmd_5), boehx8389c_qhd_video_on_cmd_5, 0 },
156+
{ sizeof(boehx8389c_qhd_video_on_cmd_6), boehx8389c_qhd_video_on_cmd_6, 0 },
157+
{ sizeof(boehx8389c_qhd_video_on_cmd_7), boehx8389c_qhd_video_on_cmd_7, 0 },
158+
{ sizeof(boehx8389c_qhd_video_on_cmd_8), boehx8389c_qhd_video_on_cmd_8, 0 },
159+
{ sizeof(boehx8389c_qhd_video_on_cmd_9), boehx8389c_qhd_video_on_cmd_9, 0 },
160+
{ sizeof(boehx8389c_qhd_video_on_cmd_10), boehx8389c_qhd_video_on_cmd_10, 0 },
161+
{ sizeof(boehx8389c_qhd_video_on_cmd_11), boehx8389c_qhd_video_on_cmd_11, 0 },
162+
{ sizeof(boehx8389c_qhd_video_on_cmd_12), boehx8389c_qhd_video_on_cmd_12, 0 },
163+
{ sizeof(boehx8389c_qhd_video_on_cmd_13), boehx8389c_qhd_video_on_cmd_13, 0 },
164+
{ sizeof(boehx8389c_qhd_video_on_cmd_14), boehx8389c_qhd_video_on_cmd_14, 0 },
165+
{ sizeof(boehx8389c_qhd_video_on_cmd_15), boehx8389c_qhd_video_on_cmd_15, 0 },
166+
{ sizeof(boehx8389c_qhd_video_on_cmd_16), boehx8389c_qhd_video_on_cmd_16, 0 },
167+
{ sizeof(boehx8389c_qhd_video_on_cmd_17), boehx8389c_qhd_video_on_cmd_17, 0 },
168+
{ sizeof(boehx8389c_qhd_video_on_cmd_18), boehx8389c_qhd_video_on_cmd_18, 0 },
169+
{ sizeof(boehx8389c_qhd_video_on_cmd_19), boehx8389c_qhd_video_on_cmd_19, 120 },
170+
{ sizeof(boehx8389c_qhd_video_on_cmd_20), boehx8389c_qhd_video_on_cmd_20, 20 },
171+
};
172+
173+
static char boehx8389c_qhd_video_off_cmd_0[] = {
174+
0x28, 0x00, 0x05, 0x80
175+
};
176+
static char boehx8389c_qhd_video_off_cmd_1[] = {
177+
0x10, 0x00, 0x05, 0x80
178+
};
179+
180+
static struct mipi_dsi_cmd boehx8389c_qhd_video_off_command[] = {
181+
{ sizeof(boehx8389c_qhd_video_off_cmd_0), boehx8389c_qhd_video_off_cmd_0, 20 },
182+
{ sizeof(boehx8389c_qhd_video_off_cmd_1), boehx8389c_qhd_video_off_cmd_1, 120 },
183+
};
184+
185+
static struct command_state boehx8389c_qhd_video_state = {
186+
.oncommand_state = 0,
187+
.offcommand_state = 1,
188+
};
189+
190+
static struct commandpanel_info boehx8389c_qhd_video_command_panel = {
191+
/* Unused, this is a video mode panel */
192+
};
193+
194+
static struct videopanel_info boehx8389c_qhd_video_video_panel = {
195+
.hsync_pulse = 1,
196+
.hfp_power_mode = 0,
197+
.hbp_power_mode = 1,
198+
.hsa_power_mode = 0,
199+
.bllp_eof_power_mode = 1,
200+
.bllp_power_mode = 1,
201+
.traffic_mode = 2,
202+
/* This is bllp_eof_power_mode and bllp_power_mode combined */
203+
.bllp_eof_power = 1 << 3 | 1 << 0,
204+
};
205+
206+
static struct lane_configuration boehx8389c_qhd_video_lane_config = {
207+
.dsi_lanes = 2,
208+
.dsi_lanemap = 0,
209+
.lane0_state = 1,
210+
.lane1_state = 1,
211+
.lane2_state = 0,
212+
.lane3_state = 0,
213+
.force_clk_lane_hs = 0,
214+
};
215+
216+
static const uint32_t boehx8389c_qhd_video_timings[] = {
217+
0x8b, 0x1e, 0x14, 0x00, 0x42, 0x46, 0x18, 0x23, 0x1b, 0x03, 0x04, 0x00
218+
};
219+
220+
static struct panel_timing boehx8389c_qhd_video_timing_info = {
221+
.tclk_post = 0x04,
222+
.tclk_pre = 0x1b,
223+
};
224+
225+
static struct panel_reset_sequence boehx8389c_qhd_video_reset_seq = {
226+
.pin_state = { 1, 0, 1 },
227+
.sleep = { 20, 20, 25 },
228+
.pin_direction = 2,
229+
};
230+
231+
static struct backlight boehx8389c_qhd_video_backlight = {
232+
.bl_interface_type = BL_PWM,
233+
.bl_min_level = 1,
234+
.bl_max_level = 255,
235+
};
236+
237+
static inline void panel_boehx8389c_qhd_video_select(struct panel_struct *panel,
238+
struct msm_panel_info *pinfo,
239+
struct mdss_dsi_phy_ctrl *phy_db)
240+
{
241+
panel->paneldata = &boehx8389c_qhd_video_panel_data;
242+
panel->panelres = &boehx8389c_qhd_video_panel_res;
243+
panel->color = &boehx8389c_qhd_video_color;
244+
panel->videopanel = &boehx8389c_qhd_video_video_panel;
245+
panel->commandpanel = &boehx8389c_qhd_video_command_panel;
246+
panel->state = &boehx8389c_qhd_video_state;
247+
panel->laneconfig = &boehx8389c_qhd_video_lane_config;
248+
panel->paneltiminginfo = &boehx8389c_qhd_video_timing_info;
249+
panel->panelresetseq = &boehx8389c_qhd_video_reset_seq;
250+
panel->backlightinfo = &boehx8389c_qhd_video_backlight;
251+
pinfo->mipi.panel_on_cmds = boehx8389c_qhd_video_on_command;
252+
pinfo->mipi.panel_off_cmds = boehx8389c_qhd_video_off_command;
253+
pinfo->mipi.num_of_panel_on_cmds = ARRAY_SIZE(boehx8389c_qhd_video_on_command);
254+
pinfo->mipi.num_of_panel_off_cmds = ARRAY_SIZE(boehx8389c_qhd_video_off_command);
255+
memcpy(phy_db->timing, boehx8389c_qhd_video_timings, TIMING_SIZE);
256+
phy_db->regulator_mode = DSI_PHY_REGULATOR_DCDC_MODE;
257+
}
258+
259+
#endif /* _PANEL_BOEHX8389C_QHD_VIDEO_H_ */

lk2nd/display/panel/generated/panels.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#define _LK2ND_GENERATED_PANELS_H_
55

66
#include "lk_panel_boe_otm8019a_5p0_fwvga_video.h"
7+
#include "lk_panel_boehx8389c_qhd_video.h"
78
#include "lk_panel_hx8394d_720p_video.h"
89
#include "lk_panel_ili9806e_boyi_byt45mp41t1m_4p5cpt.h"
910
#include "lk_panel_ili9806e_fwvga_hsd_hlt_video.h"

0 commit comments

Comments
 (0)