// SPDX-License-Identifier: GPL-2.0-only /* * Copyright (C) Rockchip Electronics Co.Ltd * Author: Andy Yan <[email protected]> */ #include <linux/kernel.h> #include <linux/component.h> #include <linux/mod_devicetable.h> #include <linux/platform_device.h> #include <linux/of.h> #include <drm/drm_fourcc.h> #include <drm/drm_plane.h> #include <drm/drm_print.h> #include "rockchip_drm_vop2.h" static const uint32_t formats_cluster[] = …; static const uint32_t formats_esmart[] = …; static const uint32_t formats_rk356x_esmart[] = …; static const uint32_t formats_smart[] = …; static const uint64_t format_modifiers[] = …; static const uint64_t format_modifiers_afbc[] = …; static const struct vop2_video_port_data rk3568_vop_video_ports[] = …; /* * rk3568 vop with 2 cluster, 2 esmart win, 2 smart win. * Every cluster can work as 4K win or split into two win. * All win in cluster support AFBCD. * * Every esmart win and smart win support 4 Multi-region. * * Scale filter mode: * * * Cluster: bicubic for horizontal scale up, others use bilinear * * ESmart: * * nearest-neighbor/bilinear/bicubic for scale up * * nearest-neighbor/bilinear/average for scale down * * * @TODO describe the wind like cpu-map dt nodes; */ static const struct vop2_win_data rk3568_vop_win_data[] = …; static const struct vop2_video_port_data rk3588_vop_video_ports[] = …; /* * rk3588 vop with 4 cluster, 4 esmart win. * Every cluster can work as 4K win or split into two win. * All win in cluster support AFBCD. * * Every esmart win and smart win support 4 Multi-region. * * Scale filter mode: * * * Cluster: bicubic for horizontal scale up, others use bilinear * * ESmart: * * nearest-neighbor/bilinear/bicubic for scale up * * nearest-neighbor/bilinear/average for scale down * * AXI Read ID assignment: * Two AXI bus: * AXI0 is a read/write bus with a higher performance. * AXI1 is a read only bus. * * Every window on a AXI bus must assigned two unique * read id(yrgb_id/uv_id, valid id are 0x1~0xe). * * AXI0: * Cluster0/1, Esmart0/1, WriteBack * * AXI 1: * Cluster2/3, Esmart2/3 * */ static const struct vop2_win_data rk3588_vop_win_data[] = …; static const struct vop2_data rk3566_vop = …; static const struct vop2_data rk3568_vop = …; static const struct vop2_data rk3588_vop = …; static const struct of_device_id vop2_dt_match[] = …; MODULE_DEVICE_TABLE(of, vop2_dt_match); static int vop2_probe(struct platform_device *pdev) { … } static void vop2_remove(struct platform_device *pdev) { … } struct platform_driver vop2_platform_driver = …;