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