xref: /rk3399_rockchip-uboot/drivers/video/drm/rockchip_crtc.c (revision ecc31b6ea0e9424e35c5aa9ab741ba1a8a9a2ec3)
1186f8572SMark Yao /*
2186f8572SMark Yao  * (C) Copyright 2008-2017 Fuzhou Rockchip Electronics Co., Ltd
3186f8572SMark Yao  *
4186f8572SMark Yao  * SPDX-License-Identifier:	GPL-2.0+
5186f8572SMark Yao  */
6186f8572SMark Yao 
7186f8572SMark Yao #include <config.h>
8186f8572SMark Yao #include <common.h>
9186f8572SMark Yao #include <errno.h>
10186f8572SMark Yao #include <malloc.h>
11186f8572SMark Yao #include <asm/unaligned.h>
12186f8572SMark Yao #include <linux/list.h>
13186f8572SMark Yao #include <dm/device.h>
14186f8572SMark Yao #include <dm.h>
15186f8572SMark Yao 
16186f8572SMark Yao #include "rockchip_display.h"
17186f8572SMark Yao #include "rockchip_crtc.h"
18186f8572SMark Yao #include "rockchip_connector.h"
19186f8572SMark Yao 
20186f8572SMark Yao static const struct rockchip_crtc rk3036_vop_data = {
21186f8572SMark Yao 	.funcs = &rockchip_vop_funcs,
22186f8572SMark Yao 	.data = &rk3036_vop,
23186f8572SMark Yao };
24186f8572SMark Yao 
25fe49d276SSandy Huang static const struct rockchip_crtc rv1108_vop_data = {
26fe49d276SSandy Huang 	.funcs = &rockchip_vop_funcs,
27fe49d276SSandy Huang 	.data = &rv1108_vop,
28fe49d276SSandy Huang };
29fe49d276SSandy Huang 
30a144d23dSAndy Yan static const struct rockchip_crtc rv1126_vop_data = {
31a144d23dSAndy Yan 	.funcs = &rockchip_vop_funcs,
32a144d23dSAndy Yan 	.data = &rv1126_vop,
33a144d23dSAndy Yan };
34a144d23dSAndy Yan 
357130fbf6SSandy Huang static const struct rockchip_crtc px30_vop_lit_data = {
367130fbf6SSandy Huang 	.funcs = &rockchip_vop_funcs,
377130fbf6SSandy Huang 	.data = &px30_vop_lit,
387130fbf6SSandy Huang };
397130fbf6SSandy Huang 
407130fbf6SSandy Huang static const struct rockchip_crtc px30_vop_big_data = {
417130fbf6SSandy Huang 	.funcs = &rockchip_vop_funcs,
427130fbf6SSandy Huang 	.data = &px30_vop_big,
437130fbf6SSandy Huang };
447130fbf6SSandy Huang 
455c651246SSandy Huang static const struct rockchip_crtc rk3308_vop_data = {
465c651246SSandy Huang 	.funcs = &rockchip_vop_funcs,
475c651246SSandy Huang 	.data = &rk3308_vop,
485c651246SSandy Huang };
495c651246SSandy Huang 
50ad3aa75aSSandy Huang static const struct rockchip_crtc rk1808_vop_data = {
51ad3aa75aSSandy Huang 	.funcs = &rockchip_vop_funcs,
52ad3aa75aSSandy Huang 	.data = &rk1808_vop,
53ad3aa75aSSandy Huang };
54ad3aa75aSSandy Huang 
5506bb018fSSandy Huang static const struct rockchip_crtc rk3288_vop_big_data = {
56186f8572SMark Yao 	.funcs = &rockchip_vop_funcs,
5706bb018fSSandy Huang 	.data = &rk3288_vop_big,
5806bb018fSSandy Huang };
5906bb018fSSandy Huang 
6006bb018fSSandy Huang static const struct rockchip_crtc rk3288_vop_lit_data = {
6106bb018fSSandy Huang 	.funcs = &rockchip_vop_funcs,
6206bb018fSSandy Huang 	.data = &rk3288_vop_lit,
63186f8572SMark Yao };
64186f8572SMark Yao 
65186f8572SMark Yao static const struct rockchip_crtc rk3368_vop_data = {
66186f8572SMark Yao 	.funcs = &rockchip_vop_funcs,
67186f8572SMark Yao 	.data = &rk3368_vop,
68186f8572SMark Yao };
69186f8572SMark Yao 
70186f8572SMark Yao static const struct rockchip_crtc rk3366_vop_data = {
71186f8572SMark Yao 	.funcs = &rockchip_vop_funcs,
72186f8572SMark Yao 	.data = &rk3366_vop,
73186f8572SMark Yao };
74186f8572SMark Yao 
75186f8572SMark Yao static const struct rockchip_crtc rk3399_vop_big_data = {
76186f8572SMark Yao 	.funcs = &rockchip_vop_funcs,
77186f8572SMark Yao 	.data = &rk3399_vop_big,
78186f8572SMark Yao };
79186f8572SMark Yao 
80186f8572SMark Yao static const struct rockchip_crtc rk3399_vop_lit_data = {
81186f8572SMark Yao 	.funcs = &rockchip_vop_funcs,
82186f8572SMark Yao 	.data = &rk3399_vop_lit,
83186f8572SMark Yao };
84186f8572SMark Yao 
85186f8572SMark Yao static const struct rockchip_crtc rk322x_vop_data = {
86186f8572SMark Yao 	.funcs = &rockchip_vop_funcs,
87186f8572SMark Yao 	.data = &rk322x_vop,
88186f8572SMark Yao };
89186f8572SMark Yao 
90186f8572SMark Yao static const struct rockchip_crtc rk3328_vop_data = {
91186f8572SMark Yao 	.funcs = &rockchip_vop_funcs,
92186f8572SMark Yao 	.data = &rk3328_vop,
93186f8572SMark Yao };
94186f8572SMark Yao 
95d0408543SAndy Yan static const struct rockchip_crtc rk3568_vop_data = {
96d0408543SAndy Yan 	.funcs = &rockchip_vop2_funcs,
97d0408543SAndy Yan 	.data = &rk3568_vop,
98d0408543SAndy Yan };
99d0408543SAndy Yan 
100*ecc31b6eSAndy Yan static const struct rockchip_crtc rk3588_vop_data = {
101*ecc31b6eSAndy Yan 	.funcs = &rockchip_vop2_funcs,
102*ecc31b6eSAndy Yan 	.data = &rk3588_vop,
103*ecc31b6eSAndy Yan };
104*ecc31b6eSAndy Yan 
105186f8572SMark Yao static const struct udevice_id rockchip_vop_ids[] = {
106186f8572SMark Yao 	{
107186f8572SMark Yao 		.compatible = "rockchip,rk3036-vop",
108186f8572SMark Yao 		.data = (ulong)&rk3036_vop_data,
109186f8572SMark Yao 	}, {
110fe49d276SSandy Huang 		.compatible = "rockchip,rv1108-vop",
111fe49d276SSandy Huang 		.data = (ulong)&rv1108_vop_data,
112fe49d276SSandy Huang 	}, {
113a144d23dSAndy Yan 		.compatible = "rockchip,rv1126-vop",
114a144d23dSAndy Yan 		.data = (ulong)&rv1126_vop_data,
115a144d23dSAndy Yan 	}, {
11603a9cc7bSMark Yao 		.compatible = "rockchip,rk3126-vop",
11703a9cc7bSMark Yao 		.data = (ulong)&rk3036_vop_data,
11803a9cc7bSMark Yao 	}, {
1197130fbf6SSandy Huang 		.compatible = "rockchip,px30-vop-lit",
1207130fbf6SSandy Huang 		.data = (ulong)&px30_vop_lit_data,
1217130fbf6SSandy Huang 	}, {
1227130fbf6SSandy Huang 		.compatible = "rockchip,px30-vop-big",
1237130fbf6SSandy Huang 		.data = (ulong)&px30_vop_big_data,
1247130fbf6SSandy Huang 	}, {
1255c651246SSandy Huang 		.compatible = "rockchip,rk3308-vop",
1265c651246SSandy Huang 		.data = (ulong)&rk3308_vop_data,
1275c651246SSandy Huang 	}, {
128ad3aa75aSSandy Huang 		.compatible = "rockchip,rk1808-vop-lit",
129ad3aa75aSSandy Huang 		.data = (ulong)&rk1808_vop_data,
130ad3aa75aSSandy Huang 	}, {
13106bb018fSSandy Huang 		.compatible = "rockchip,rk3288-vop-big",
13206bb018fSSandy Huang 		.data = (ulong)&rk3288_vop_big_data,
13306bb018fSSandy Huang 	}, {
13406bb018fSSandy Huang 		.compatible = "rockchip,rk3288-vop-lit",
13506bb018fSSandy Huang 		.data = (ulong)&rk3288_vop_lit_data,
136186f8572SMark Yao 	}, {
137186f8572SMark Yao 		.compatible = "rockchip,rk3368-vop",
138186f8572SMark Yao 		.data = (ulong)&rk3368_vop_data,
139186f8572SMark Yao 	}, {
140186f8572SMark Yao 		.compatible = "rockchip,rk3366-vop",
141186f8572SMark Yao 		.data = (ulong)&rk3366_vop_data,
142186f8572SMark Yao 	}, {
143186f8572SMark Yao 		.compatible = "rockchip,rk3399-vop-big",
144186f8572SMark Yao 		.data = (ulong)&rk3399_vop_big_data,
145186f8572SMark Yao 	}, {
146186f8572SMark Yao 		.compatible = "rockchip,rk3399-vop-lit",
147186f8572SMark Yao 		.data = (ulong)&rk3399_vop_lit_data,
148186f8572SMark Yao 	}, {
149186f8572SMark Yao 		.compatible = "rockchip,rk322x-vop",
150186f8572SMark Yao 		.data = (ulong)&rk322x_vop_data,
151186f8572SMark Yao 	}, {
152186f8572SMark Yao 		.compatible = "rockchip,rk3328-vop",
153186f8572SMark Yao 		.data = (ulong)&rk3328_vop_data,
154d0408543SAndy Yan 	}, {
155d0408543SAndy Yan 		.compatible = "rockchip,rk3568-vop",
156d0408543SAndy Yan 		.data = (ulong)&rk3568_vop_data,
157*ecc31b6eSAndy Yan 	}, {
158*ecc31b6eSAndy Yan 		.compatible = "rockchip,rk3588-vop",
159*ecc31b6eSAndy Yan 		.data = (ulong)&rk3588_vop_data,
160186f8572SMark Yao 	}, { }
161186f8572SMark Yao };
162186f8572SMark Yao 
163186f8572SMark Yao static int rockchip_vop_probe(struct udevice *dev)
164186f8572SMark Yao {
165186f8572SMark Yao 	return 0;
166186f8572SMark Yao }
167186f8572SMark Yao 
168186f8572SMark Yao static int rockchip_vop_bind(struct udevice *dev)
169186f8572SMark Yao {
170186f8572SMark Yao 	return 0;
171186f8572SMark Yao }
172186f8572SMark Yao 
173186f8572SMark Yao U_BOOT_DRIVER(rockchip_vop) = {
174186f8572SMark Yao 	.name	= "rockchip-vop",
175186f8572SMark Yao 	.id	= UCLASS_VIDEO_CRTC,
176186f8572SMark Yao 	.of_match = rockchip_vop_ids,
177186f8572SMark Yao 	.bind	= rockchip_vop_bind,
178186f8572SMark Yao 	.probe	= rockchip_vop_probe,
179186f8572SMark Yao };
180186f8572SMark Yao 
181186f8572SMark Yao UCLASS_DRIVER(rockchip_crtc) = {
182186f8572SMark Yao 	.id		= UCLASS_VIDEO_CRTC,
183186f8572SMark Yao 	.name		= "CRTC",
184186f8572SMark Yao };
185