xref: /rk3399_rockchip-uboot/drivers/video/drm/panel-rohm-bu18rl82.c (revision 6180119c8ba4acdd107cef9a60604fbf225270cc)
1*6180119cSWyon Bi // SPDX-License-Identifier: GPL-2.0+
2*6180119cSWyon Bi /*
3*6180119cSWyon Bi  * Rohm BU18RL82-based panel driver
4*6180119cSWyon Bi  *
5*6180119cSWyon Bi  * (C) Copyright 2022 Rockchip Electronics Co., Ltd
6*6180119cSWyon Bi  */
7*6180119cSWyon Bi 
8*6180119cSWyon Bi #include <config.h>
9*6180119cSWyon Bi #include <common.h>
10*6180119cSWyon Bi #include <backlight.h>
11*6180119cSWyon Bi #include <errno.h>
12*6180119cSWyon Bi #include <malloc.h>
13*6180119cSWyon Bi #include <video.h>
14*6180119cSWyon Bi 
15*6180119cSWyon Bi #include <asm/gpio.h>
16*6180119cSWyon Bi #include <dm/device.h>
17*6180119cSWyon Bi #include <dm/read.h>
18*6180119cSWyon Bi #include <dm/pinctrl.h>
19*6180119cSWyon Bi #include <dm/uclass-id.h>
20*6180119cSWyon Bi #include <linux/media-bus-format.h>
21*6180119cSWyon Bi 
22*6180119cSWyon Bi #include "rockchip_display.h"
23*6180119cSWyon Bi #include "rockchip_panel.h"
24*6180119cSWyon Bi 
25*6180119cSWyon Bi struct bu18rl82;
26*6180119cSWyon Bi 
27*6180119cSWyon Bi struct panel_desc {
28*6180119cSWyon Bi 	const char *name;
29*6180119cSWyon Bi 	int (*prepare)(struct bu18rl82 *rl82);
30*6180119cSWyon Bi 	int (*unprepare)(struct bu18rl82 *rl82);
31*6180119cSWyon Bi 	int (*enable)(struct bu18rl82 *rl82);
32*6180119cSWyon Bi 	int (*disable)(struct bu18rl82 *rl82);
33*6180119cSWyon Bi 	int (*backlight_enable)(struct bu18rl82 *rl82);
34*6180119cSWyon Bi 	int (*backlight_disable)(struct bu18rl82 *rl82);
35*6180119cSWyon Bi };
36*6180119cSWyon Bi 
37*6180119cSWyon Bi struct bu18rl82 {
38*6180119cSWyon Bi 	struct udevice *dev;
39*6180119cSWyon Bi 	struct udevice *backlight;
40*6180119cSWyon Bi 	const struct panel_desc *desc;
41*6180119cSWyon Bi };
42*6180119cSWyon Bi 
bu18rl82_panel_prepare(struct rockchip_panel * panel)43*6180119cSWyon Bi static void bu18rl82_panel_prepare(struct rockchip_panel *panel)
44*6180119cSWyon Bi {
45*6180119cSWyon Bi 	struct bu18rl82 *rl82 = dev_get_priv(panel->dev);
46*6180119cSWyon Bi 	const struct panel_desc *desc = rl82->desc;
47*6180119cSWyon Bi 
48*6180119cSWyon Bi 	if (desc->prepare)
49*6180119cSWyon Bi 		desc->prepare(rl82);
50*6180119cSWyon Bi }
51*6180119cSWyon Bi 
bu18rl82_panel_unprepare(struct rockchip_panel * panel)52*6180119cSWyon Bi static void bu18rl82_panel_unprepare(struct rockchip_panel *panel)
53*6180119cSWyon Bi {
54*6180119cSWyon Bi 	struct bu18rl82 *rl82 = dev_get_priv(panel->dev);
55*6180119cSWyon Bi 	const struct panel_desc *desc = rl82->desc;
56*6180119cSWyon Bi 
57*6180119cSWyon Bi 	if (desc->unprepare)
58*6180119cSWyon Bi 		desc->unprepare(rl82);
59*6180119cSWyon Bi }
60*6180119cSWyon Bi 
bu18rl82_panel_enable(struct rockchip_panel * panel)61*6180119cSWyon Bi static void bu18rl82_panel_enable(struct rockchip_panel *panel)
62*6180119cSWyon Bi {
63*6180119cSWyon Bi 	struct bu18rl82 *rl82 = dev_get_priv(panel->dev);
64*6180119cSWyon Bi 	const struct panel_desc *desc = rl82->desc;
65*6180119cSWyon Bi 
66*6180119cSWyon Bi 	if (desc->enable)
67*6180119cSWyon Bi 		desc->enable(rl82);
68*6180119cSWyon Bi 
69*6180119cSWyon Bi 	if (rl82->backlight)
70*6180119cSWyon Bi 		backlight_enable(rl82->backlight);
71*6180119cSWyon Bi 
72*6180119cSWyon Bi 	if (desc->backlight_enable)
73*6180119cSWyon Bi 		desc->backlight_enable(rl82);
74*6180119cSWyon Bi }
75*6180119cSWyon Bi 
bu18rl82_panel_disable(struct rockchip_panel * panel)76*6180119cSWyon Bi static void bu18rl82_panel_disable(struct rockchip_panel *panel)
77*6180119cSWyon Bi {
78*6180119cSWyon Bi 	struct bu18rl82 *rl82 = dev_get_priv(panel->dev);
79*6180119cSWyon Bi 	const struct panel_desc *desc = rl82->desc;
80*6180119cSWyon Bi 
81*6180119cSWyon Bi 	if (desc->backlight_disable)
82*6180119cSWyon Bi 		desc->backlight_disable(rl82);
83*6180119cSWyon Bi 
84*6180119cSWyon Bi 	if (rl82->backlight)
85*6180119cSWyon Bi 		backlight_disable(rl82->backlight);
86*6180119cSWyon Bi 
87*6180119cSWyon Bi 	if (desc->disable)
88*6180119cSWyon Bi 		desc->disable(rl82);
89*6180119cSWyon Bi }
90*6180119cSWyon Bi 
91*6180119cSWyon Bi static const struct rockchip_panel_funcs bu18rl82_panel_funcs = {
92*6180119cSWyon Bi 	.prepare = bu18rl82_panel_prepare,
93*6180119cSWyon Bi 	.unprepare = bu18rl82_panel_unprepare,
94*6180119cSWyon Bi 	.enable = bu18rl82_panel_enable,
95*6180119cSWyon Bi 	.disable = bu18rl82_panel_disable,
96*6180119cSWyon Bi };
97*6180119cSWyon Bi 
bu18rl82_probe(struct udevice * dev)98*6180119cSWyon Bi static int bu18rl82_probe(struct udevice *dev)
99*6180119cSWyon Bi {
100*6180119cSWyon Bi 	struct bu18rl82 *rl82 = dev_get_priv(dev);
101*6180119cSWyon Bi 	struct rockchip_panel *panel;
102*6180119cSWyon Bi 	int ret;
103*6180119cSWyon Bi 
104*6180119cSWyon Bi 	ret = i2c_set_chip_offset_len(dev, 2);
105*6180119cSWyon Bi 	if (ret)
106*6180119cSWyon Bi 		return ret;
107*6180119cSWyon Bi 
108*6180119cSWyon Bi 	rl82->dev = dev;
109*6180119cSWyon Bi 	rl82->desc = (const struct panel_desc *)dev_get_driver_data(dev);
110*6180119cSWyon Bi 
111*6180119cSWyon Bi 	ret = uclass_get_device_by_phandle(UCLASS_PANEL_BACKLIGHT, dev,
112*6180119cSWyon Bi 					   "backlight", &rl82->backlight);
113*6180119cSWyon Bi 	if (ret && ret != -ENOENT) {
114*6180119cSWyon Bi 		dev_err(dev, "%s: Cannot get backlight: %d\n", __func__, ret);
115*6180119cSWyon Bi 		return ret;
116*6180119cSWyon Bi 	}
117*6180119cSWyon Bi 
118*6180119cSWyon Bi 	panel = calloc(1, sizeof(*panel));
119*6180119cSWyon Bi 	if (!panel)
120*6180119cSWyon Bi 		return -ENOMEM;
121*6180119cSWyon Bi 
122*6180119cSWyon Bi 	dev->driver_data = (ulong)panel;
123*6180119cSWyon Bi 	panel->dev = dev;
124*6180119cSWyon Bi 	panel->bus_format = MEDIA_BUS_FMT_RGB888_1X24;
125*6180119cSWyon Bi 	panel->funcs = &bu18rl82_panel_funcs;
126*6180119cSWyon Bi 
127*6180119cSWyon Bi 	return 0;
128*6180119cSWyon Bi }
129*6180119cSWyon Bi 
130*6180119cSWyon Bi #define rohm_deserializer_write(rl82, reg, val) do {			\
131*6180119cSWyon Bi 		int ret;						\
132*6180119cSWyon Bi 		ret = dm_i2c_reg_write(rl82->dev, reg, val);		\
133*6180119cSWyon Bi 		if (ret) {						\
134*6180119cSWyon Bi 			dev_err(rl82->dev,				\
135*6180119cSWyon Bi 				"failed to set register 0x%04x\n",	\
136*6180119cSWyon Bi 				reg);					\
137*6180119cSWyon Bi 			return ret;					\
138*6180119cSWyon Bi 		}							\
139*6180119cSWyon Bi 	} while (0)
140*6180119cSWyon Bi 
csot_mg1561b01_prepare(struct bu18rl82 * rl82)141*6180119cSWyon Bi static int csot_mg1561b01_prepare(struct bu18rl82 *rl82)
142*6180119cSWyon Bi {
143*6180119cSWyon Bi 	const struct reg_sequence {
144*6180119cSWyon Bi 		u16 reg;
145*6180119cSWyon Bi 		u8 def;
146*6180119cSWyon Bi 	} regs[] = {
147*6180119cSWyon Bi 		{ 0x0011, 0x03 }, { 0x0012, 0x03 },
148*6180119cSWyon Bi 		{ 0x001f, 0x02 }, { 0x0020, 0x02 },
149*6180119cSWyon Bi 		{ 0x0031, 0x41 }, { 0x0032, 0x41 },
150*6180119cSWyon Bi 		{ 0x0073, 0x80 }, { 0x0074, 0x07 },
151*6180119cSWyon Bi 		{ 0x007b, 0x38 }, { 0x007c, 0x04 },
152*6180119cSWyon Bi 		{ 0x0079, 0x0a },
153*6180119cSWyon Bi 		{ 0x0429, 0x0a }, { 0x045d, 0x01 },
154*6180119cSWyon Bi 		{ 0x0529, 0x0a }, { 0x055d, 0x01 },
155*6180119cSWyon Bi 		{ 0x060a, 0xb0 }, { 0x060b, 0xff }, { 0x060c, 0xff },
156*6180119cSWyon Bi 		{ 0x0644, 0x18 }, { 0x0645, 0x01 }, { 0x0646, 0x2d },
157*6180119cSWyon Bi 	};
158*6180119cSWyon Bi 	int i;
159*6180119cSWyon Bi 
160*6180119cSWyon Bi 	for (i = 0; i < ARRAY_SIZE(regs); i++)
161*6180119cSWyon Bi 		rohm_deserializer_write(rl82, regs[i].reg, regs[i].def);
162*6180119cSWyon Bi 
163*6180119cSWyon Bi 	/* BL_PWM - GPIO0 */
164*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0057, 0x00);
165*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0058, 0x02);
166*6180119cSWyon Bi 
167*6180119cSWyon Bi 	/* TP_INT - GPIO3 */
168*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0060, 0x08);
169*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x042e, 0x05);
170*6180119cSWyon Bi 
171*6180119cSWyon Bi 	/* TP_RST - GPIO4 */
172*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0063, 0x00);
173*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0064, 0x01);
174*6180119cSWyon Bi 
175*6180119cSWyon Bi 	return 0;
176*6180119cSWyon Bi }
177*6180119cSWyon Bi 
csot_mg1561b01_unprepare(struct bu18rl82 * rl82)178*6180119cSWyon Bi static int csot_mg1561b01_unprepare(struct bu18rl82 *rl82)
179*6180119cSWyon Bi {
180*6180119cSWyon Bi 	/* TP_RST - GPIO4 */
181*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0064, 0x00);
182*6180119cSWyon Bi 
183*6180119cSWyon Bi 	return 0;
184*6180119cSWyon Bi }
185*6180119cSWyon Bi 
csot_mg1561b01_enable(struct bu18rl82 * rl82)186*6180119cSWyon Bi static int csot_mg1561b01_enable(struct bu18rl82 *rl82)
187*6180119cSWyon Bi {
188*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0091, 0x03);
189*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0090, 0x01);
190*6180119cSWyon Bi 
191*6180119cSWyon Bi 	return 0;
192*6180119cSWyon Bi }
193*6180119cSWyon Bi 
csot_mg1561b01_disable(struct bu18rl82 * rl82)194*6180119cSWyon Bi static int csot_mg1561b01_disable(struct bu18rl82 *rl82)
195*6180119cSWyon Bi {
196*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0090, 0x00);
197*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0091, 0x00);
198*6180119cSWyon Bi 
199*6180119cSWyon Bi 	return 0;
200*6180119cSWyon Bi }
201*6180119cSWyon Bi 
csot_mg1561b01_backlight_enable(struct bu18rl82 * rl82)202*6180119cSWyon Bi static int csot_mg1561b01_backlight_enable(struct bu18rl82 *rl82)
203*6180119cSWyon Bi {
204*6180119cSWyon Bi 	/* BL_EN - GPIO1 */
205*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x005a, 0x00);
206*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x005b, 0x01);
207*6180119cSWyon Bi 
208*6180119cSWyon Bi 	return 0;
209*6180119cSWyon Bi }
210*6180119cSWyon Bi 
csot_mg1561b01_backlight_disable(struct bu18rl82 * rl82)211*6180119cSWyon Bi static int csot_mg1561b01_backlight_disable(struct bu18rl82 *rl82)
212*6180119cSWyon Bi {
213*6180119cSWyon Bi 	/* BL_EN - GPIO1 */
214*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x005b, 0x00);
215*6180119cSWyon Bi 
216*6180119cSWyon Bi 	return 0;
217*6180119cSWyon Bi }
218*6180119cSWyon Bi 
219*6180119cSWyon Bi static const struct panel_desc csot_mg1561b01 = {
220*6180119cSWyon Bi 	.name			= "csot,mg1561b01",
221*6180119cSWyon Bi 	.prepare		= csot_mg1561b01_prepare,
222*6180119cSWyon Bi 	.unprepare		= csot_mg1561b01_unprepare,
223*6180119cSWyon Bi 	.enable			= csot_mg1561b01_enable,
224*6180119cSWyon Bi 	.disable		= csot_mg1561b01_disable,
225*6180119cSWyon Bi 	.backlight_enable	= csot_mg1561b01_backlight_enable,
226*6180119cSWyon Bi 	.backlight_disable	= csot_mg1561b01_backlight_disable,
227*6180119cSWyon Bi };
228*6180119cSWyon Bi 
touch_china_v123awf3_r1_prepare(struct bu18rl82 * rl82)229*6180119cSWyon Bi static int touch_china_v123awf3_r1_prepare(struct bu18rl82 *rl82)
230*6180119cSWyon Bi {
231*6180119cSWyon Bi 	const struct reg_sequence {
232*6180119cSWyon Bi 		u16 reg;
233*6180119cSWyon Bi 		u8 def;
234*6180119cSWyon Bi 	} regs[] = {
235*6180119cSWyon Bi 		{ 0x0011, 0x03 }, { 0x0012, 0x03 },
236*6180119cSWyon Bi 		{ 0x001f, 0x02 }, { 0x0020, 0x02 },
237*6180119cSWyon Bi 		{ 0x0031, 0x48 }, { 0x0032, 0x48 },
238*6180119cSWyon Bi 		{ 0x0073, 0x80 }, { 0x0074, 0x07 },
239*6180119cSWyon Bi 		{ 0x007b, 0xd0 }, { 0x007c, 0x02 },
240*6180119cSWyon Bi 		{ 0x0079, 0x0a },
241*6180119cSWyon Bi 		{ 0x0429, 0x0a }, { 0x045d, 0x01 },
242*6180119cSWyon Bi 		{ 0x0529, 0x0a }, { 0x055d, 0x01 },
243*6180119cSWyon Bi 		{ 0x060a, 0xb0 }, { 0x060b, 0xff }, { 0x060c, 0xff },
244*6180119cSWyon Bi 		{ 0x0644, 0x90 }, { 0x0646, 0xd2 },
245*6180119cSWyon Bi 	};
246*6180119cSWyon Bi 	int i;
247*6180119cSWyon Bi 
248*6180119cSWyon Bi 	for (i = 0; i < ARRAY_SIZE(regs); i++)
249*6180119cSWyon Bi 		rohm_deserializer_write(rl82, regs[i].reg, regs[i].def);
250*6180119cSWyon Bi 
251*6180119cSWyon Bi 	/* TP_INT - GPIO4 */
252*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0063, 0x08);
253*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x042f, 0x06);
254*6180119cSWyon Bi 
255*6180119cSWyon Bi 	/* TP_RST - GPIO3 */
256*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0060, 0x00);
257*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0061, 0x00);
258*6180119cSWyon Bi 
259*6180119cSWyon Bi 	/* LCD_BIAS_EN - GPIO2 */
260*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x005d, 0x00);
261*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x005e, 0x01);
262*6180119cSWyon Bi 	mdelay(6);
263*6180119cSWyon Bi 
264*6180119cSWyon Bi 	return 0;
265*6180119cSWyon Bi }
266*6180119cSWyon Bi 
touch_china_v123awf3_r1_unprepare(struct bu18rl82 * rl82)267*6180119cSWyon Bi static int touch_china_v123awf3_r1_unprepare(struct bu18rl82 *rl82)
268*6180119cSWyon Bi {
269*6180119cSWyon Bi 	/* LCD_BIAS_EN - GPIO2 */
270*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x005e, 0x00);
271*6180119cSWyon Bi 
272*6180119cSWyon Bi 	return 0;
273*6180119cSWyon Bi }
274*6180119cSWyon Bi 
touch_china_v123awf3_r1_enable(struct bu18rl82 * rl82)275*6180119cSWyon Bi static int touch_china_v123awf3_r1_enable(struct bu18rl82 *rl82)
276*6180119cSWyon Bi {
277*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0091, 0x03);
278*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0090, 0x01);
279*6180119cSWyon Bi 
280*6180119cSWyon Bi 	/* RSEX - GPIO5 */
281*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0066, 0x00);
282*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0067, 0x01);
283*6180119cSWyon Bi 	/* TP_RST - GPIO3 */
284*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0060, 0x00);
285*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0061, 0x01);
286*6180119cSWyon Bi 	mdelay(20);
287*6180119cSWyon Bi 	/* LCD_PON - GPIO1 */
288*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x005a, 0x00);
289*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x005b, 0x01);
290*6180119cSWyon Bi 
291*6180119cSWyon Bi 	return 0;
292*6180119cSWyon Bi }
293*6180119cSWyon Bi 
touch_china_v123awf3_r1_disable(struct bu18rl82 * rl82)294*6180119cSWyon Bi static int touch_china_v123awf3_r1_disable(struct bu18rl82 *rl82)
295*6180119cSWyon Bi {
296*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0090, 0x00);
297*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0091, 0x00);
298*6180119cSWyon Bi 
299*6180119cSWyon Bi 	/* LCD_PON - GPIO1 */
300*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x005b, 0x00);
301*6180119cSWyon Bi 	mdelay(100);
302*6180119cSWyon Bi 	/* TP_RST - GPIO3 */
303*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0061, 0x00);
304*6180119cSWyon Bi 	/* RSEX - GPIO5 */
305*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0067, 0x00);
306*6180119cSWyon Bi 
307*6180119cSWyon Bi 	return 0;
308*6180119cSWyon Bi }
309*6180119cSWyon Bi 
touch_china_v123awf3_r1_backlight_enable(struct bu18rl82 * rl82)310*6180119cSWyon Bi static int touch_china_v123awf3_r1_backlight_enable(struct bu18rl82 *rl82)
311*6180119cSWyon Bi {
312*6180119cSWyon Bi 	/* BL_PWM - GPIO0 */
313*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0057, 0x00);
314*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0058, 0x02);
315*6180119cSWyon Bi 
316*6180119cSWyon Bi 	return 0;
317*6180119cSWyon Bi }
318*6180119cSWyon Bi 
touch_china_v123awf3_r1_backlight_disable(struct bu18rl82 * rl82)319*6180119cSWyon Bi static int touch_china_v123awf3_r1_backlight_disable(struct bu18rl82 *rl82)
320*6180119cSWyon Bi {
321*6180119cSWyon Bi 	/* BL_PWM - GPIO0 */
322*6180119cSWyon Bi 	rohm_deserializer_write(rl82, 0x0058, 0x00);
323*6180119cSWyon Bi 
324*6180119cSWyon Bi 	return 0;
325*6180119cSWyon Bi }
326*6180119cSWyon Bi 
327*6180119cSWyon Bi static const struct panel_desc touch_china_v123awf3_r1 = {
328*6180119cSWyon Bi 	.name			= "touch-china,v123awf3-r1",
329*6180119cSWyon Bi 	.prepare		= touch_china_v123awf3_r1_prepare,
330*6180119cSWyon Bi 	.unprepare		= touch_china_v123awf3_r1_unprepare,
331*6180119cSWyon Bi 	.enable			= touch_china_v123awf3_r1_enable,
332*6180119cSWyon Bi 	.disable		= touch_china_v123awf3_r1_disable,
333*6180119cSWyon Bi 	.backlight_enable	= touch_china_v123awf3_r1_backlight_enable,
334*6180119cSWyon Bi 	.backlight_disable	= touch_china_v123awf3_r1_backlight_disable,
335*6180119cSWyon Bi };
336*6180119cSWyon Bi 
337*6180119cSWyon Bi static const struct udevice_id bu18rl82_of_match[] = {
338*6180119cSWyon Bi 	{ .compatible = "csot,mg1561b01", .data = (ulong)&csot_mg1561b01 },
339*6180119cSWyon Bi 	{ .compatible = "touch-china,v123awf3-r1", .data = (ulong)&touch_china_v123awf3_r1 },
340*6180119cSWyon Bi 	{}
341*6180119cSWyon Bi };
342*6180119cSWyon Bi 
343*6180119cSWyon Bi U_BOOT_DRIVER(panel_rohm_bu18rl82) = {
344*6180119cSWyon Bi 	.name = "panel-rohm-bu18rl82",
345*6180119cSWyon Bi 	.id = UCLASS_PANEL,
346*6180119cSWyon Bi 	.of_match = bu18rl82_of_match,
347*6180119cSWyon Bi 	.probe = bu18rl82_probe,
348*6180119cSWyon Bi 	.priv_auto_alloc_size = sizeof(struct bu18rl82),
349*6180119cSWyon Bi };
350